()
| 181 | // ---------------------------------------------------------------------- |
| 182 | |
| 183 | public Expression primaryExpression() { |
| 184 | TokenType t = la(); |
| 185 | |
| 186 | Token token = null; |
| 187 | |
| 188 | switch (t) { |
| 189 | case THIS: |
| 190 | return factory.thisExpression(consume()); |
| 191 | case IDENTIFIER: |
| 192 | token = consume(IDENTIFIER); |
| 193 | if (!isValidIdentifier(token)) { |
| 194 | throw new SyntaxError(token, "invalid identifier: " + token.getText()); |
| 195 | } |
| 196 | return factory.identifier(token, token.getText()); |
| 197 | case STRING_LITERAL: |
| 198 | token = consume(STRING_LITERAL); |
| 199 | if (currentContext().isStrict() && token.isEscapedOctalString()) { |
| 200 | throw new SyntaxError(token, "octal escapes not allowed in strict mode"); |
| 201 | } |
| 202 | return factory.stringLiteral(token, token.getText(), token.isEscapedString(), token.isContinuedLine()); |
| 203 | case DECIMAL_LITERAL: |
| 204 | token = consume(DECIMAL_LITERAL); |
| 205 | return factory.decimalLiteral(token, token.getText()); |
| 206 | case HEX_LITERAL: |
| 207 | token = consume(HEX_LITERAL); |
| 208 | return factory.hexLiteral(token, token.getText()); |
| 209 | case OCTAL_LITERAL: |
| 210 | token = consume(OCTAL_LITERAL); |
| 211 | if (currentContext().isStrict()) { |
| 212 | throw new SyntaxError(token, "octal literals not allowed in strict mode"); |
| 213 | } |
| 214 | return factory.octalLiteral(token, token.getText()); |
| 215 | case REGEXP_LITERAL: |
| 216 | token = consume(REGEXP_LITERAL); |
| 217 | return factory.regexpLiteral(token, token.getText()); |
| 218 | case TRUE: |
| 219 | return factory.trueLiteral(consume()); |
| 220 | case FALSE: |
| 221 | return factory.falseLiteral(consume()); |
| 222 | case NULL: |
| 223 | return factory.nullLiteral(consume()); |
| 224 | case LEFT_BRACE: |
| 225 | return objectLiteral(); |
| 226 | case LEFT_BRACKET: |
| 227 | return arrayLiteral(); |
| 228 | case LEFT_PAREN: |
| 229 | consume(LEFT_PAREN); |
| 230 | try { |
| 231 | ++this.parens; |
| 232 | Expression expr = expression(); |
| 233 | consume(RIGHT_PAREN); |
| 234 | return expr; |
| 235 | } finally { |
| 236 | --this.parens; |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | throw new SyntaxError(laToken(), "unexpected token: " + laToken().getText()); |
no test coverage detected