(tokenizer, src)
| 426 | } |
| 427 | |
| 428 | parse(tokenizer, src) { |
| 429 | var tokens = tokenizer.tokenize(src); |
| 430 | var parser = new Parser(this, tokens); |
| 431 | var result, lastError; |
| 432 | try { |
| 433 | if (parser.commandStart(tokens.currentToken())) { |
| 434 | result = this.requireElement("commandList", parser); |
| 435 | if (tokens.hasMore()) parser.raiseError(); |
| 436 | parser.ensureTerminated(result); |
| 437 | } else if (parser.featureStart(tokens.currentToken())) { |
| 438 | result = this.requireElement("hyperscript", parser); |
| 439 | if (tokens.hasMore()) parser.raiseError(); |
| 440 | } else { |
| 441 | result = this.requireElement("expression", parser); |
| 442 | if (tokens.hasMore()) parser.raiseError(); |
| 443 | } |
| 444 | } catch (e) { |
| 445 | if (!(e instanceof ParseRecoverySentinel)) throw e; |
| 446 | lastError = e.parseError; |
| 447 | } |
| 448 | if (!result && lastError) { |
| 449 | result = { type: "empty", errors: [lastError] }; |
| 450 | } else if (result) { |
| 451 | result.errors = result.collectErrors(); |
| 452 | if (lastError) result.errors.push(lastError); |
| 453 | } |
| 454 | return result; |
| 455 | } |
| 456 | |
| 457 | } |
no test coverage detected