123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _flow = require('../plugins/flow');
- var _typescript = require('../plugins/typescript');
- var _index = require('../tokenizer/index');
- var _keywords = require('../tokenizer/keywords');
- var _types = require('../tokenizer/types');
- var _base = require('./base');
- var _expression = require('./expression');
- var _util = require('./util');
- function parseSpread() {
- _index.next.call(void 0, );
- _expression.parseMaybeAssign.call(void 0, false);
- } exports.parseSpread = parseSpread;
- function parseRest(isBlockScope) {
- _index.next.call(void 0, );
- parseBindingAtom(isBlockScope);
- } exports.parseRest = parseRest;
- function parseBindingIdentifier(isBlockScope) {
- _expression.parseIdentifier.call(void 0, );
- markPriorBindingIdentifier(isBlockScope);
- } exports.parseBindingIdentifier = parseBindingIdentifier;
- function parseImportedIdentifier() {
- _expression.parseIdentifier.call(void 0, );
- _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ImportDeclaration;
- } exports.parseImportedIdentifier = parseImportedIdentifier;
- function markPriorBindingIdentifier(isBlockScope) {
- let identifierRole;
- if (_base.state.scopeDepth === 0) {
- identifierRole = _index.IdentifierRole.TopLevelDeclaration;
- } else if (isBlockScope) {
- identifierRole = _index.IdentifierRole.BlockScopedDeclaration;
- } else {
- identifierRole = _index.IdentifierRole.FunctionScopedDeclaration;
- }
- _base.state.tokens[_base.state.tokens.length - 1].identifierRole = identifierRole;
- } exports.markPriorBindingIdentifier = markPriorBindingIdentifier;
- // Parses lvalue (assignable) atom.
- function parseBindingAtom(isBlockScope) {
- switch (_base.state.type) {
- case _types.TokenType._this: {
- // In TypeScript, "this" may be the name of a parameter, so allow it.
- const oldIsType = _index.pushTypeContext.call(void 0, 0);
- _index.next.call(void 0, );
- _index.popTypeContext.call(void 0, oldIsType);
- return;
- }
- case _types.TokenType._yield:
- case _types.TokenType.name: {
- _base.state.type = _types.TokenType.name;
- parseBindingIdentifier(isBlockScope);
- return;
- }
- case _types.TokenType.bracketL: {
- _index.next.call(void 0, );
- parseBindingList(_types.TokenType.bracketR, isBlockScope, true /* allowEmpty */);
- return;
- }
- case _types.TokenType.braceL:
- _expression.parseObj.call(void 0, true, isBlockScope);
- return;
- default:
- _util.unexpected.call(void 0, );
- }
- } exports.parseBindingAtom = parseBindingAtom;
- function parseBindingList(
- close,
- isBlockScope,
- allowEmpty = false,
- allowModifiers = false,
- contextId = 0,
- ) {
- let first = true;
- let hasRemovedComma = false;
- const firstItemTokenIndex = _base.state.tokens.length;
- while (!_index.eat.call(void 0, close) && !_base.state.error) {
- if (first) {
- first = false;
- } else {
- _util.expect.call(void 0, _types.TokenType.comma);
- _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId;
- // After a "this" type in TypeScript, we need to set the following comma (if any) to also be
- // a type token so that it will be removed.
- if (!hasRemovedComma && _base.state.tokens[firstItemTokenIndex].isType) {
- _base.state.tokens[_base.state.tokens.length - 1].isType = true;
- hasRemovedComma = true;
- }
- }
- if (allowEmpty && _index.match.call(void 0, _types.TokenType.comma)) {
- // Empty item; nothing further to parse for this item.
- } else if (_index.eat.call(void 0, close)) {
- break;
- } else if (_index.match.call(void 0, _types.TokenType.ellipsis)) {
- parseRest(isBlockScope);
- parseAssignableListItemTypes();
- // Support rest element trailing commas allowed by TypeScript <2.9.
- _index.eat.call(void 0, _types.TokenType.comma);
- _util.expect.call(void 0, close);
- break;
- } else {
- parseAssignableListItem(allowModifiers, isBlockScope);
- }
- }
- } exports.parseBindingList = parseBindingList;
- function parseAssignableListItem(allowModifiers, isBlockScope) {
- if (allowModifiers) {
- _typescript.tsParseModifiers.call(void 0, [
- _keywords.ContextualKeyword._public,
- _keywords.ContextualKeyword._protected,
- _keywords.ContextualKeyword._private,
- _keywords.ContextualKeyword._readonly,
- _keywords.ContextualKeyword._override,
- ]);
- }
- parseMaybeDefault(isBlockScope);
- parseAssignableListItemTypes();
- parseMaybeDefault(isBlockScope, true /* leftAlreadyParsed */);
- }
- function parseAssignableListItemTypes() {
- if (_base.isFlowEnabled) {
- _flow.flowParseAssignableListItemTypes.call(void 0, );
- } else if (_base.isTypeScriptEnabled) {
- _typescript.tsParseAssignableListItemTypes.call(void 0, );
- }
- }
- // Parses assignment pattern around given atom if possible.
- function parseMaybeDefault(isBlockScope, leftAlreadyParsed = false) {
- if (!leftAlreadyParsed) {
- parseBindingAtom(isBlockScope);
- }
- if (!_index.eat.call(void 0, _types.TokenType.eq)) {
- return;
- }
- const eqIndex = _base.state.tokens.length - 1;
- _expression.parseMaybeAssign.call(void 0, );
- _base.state.tokens[eqIndex].rhsEndIndex = _base.state.tokens.length;
- } exports.parseMaybeDefault = parseMaybeDefault;
|