From 472b0798622bb5fecb585c6429f264d275ad438f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 15 Jul 2015 15:34:47 +0100 Subject: [PATCH] remove ecmaVersion <= 6 --- packages/babylon/src/expression.js | 50 ++++++++++++------------------ packages/babylon/src/lval.js | 2 +- packages/babylon/src/state.js | 2 +- packages/babylon/src/statement.js | 22 +++++-------- packages/babylon/src/tokenize.js | 20 +++++------- 5 files changed, 36 insertions(+), 60 deletions(-) diff --git a/packages/babylon/src/expression.js b/packages/babylon/src/expression.js index 2fc04783a9..5ab60bcec0 100755 --- a/packages/babylon/src/expression.js +++ b/packages/babylon/src/expression.js @@ -28,7 +28,7 @@ const pp = Parser.prototype; // strict mode, init properties are also not allowed to be repeated. pp.checkPropClash = function (prop, propHash) { - if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) return; + if (prop.computed || prop.method || prop.shorthand) return; let key = prop.key, name; switch (key.type) { @@ -38,12 +38,9 @@ pp.checkPropClash = function (prop, propHash) { } let kind = prop.kind; - if (this.options.ecmaVersion >= 6) { - if (name === "__proto__" && kind === "init") { - if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property"); - propHash.proto = true; - } - return; + if (name === "__proto__" && kind === "init") { + if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property"); + propHash.proto = true; } let other; @@ -524,7 +521,7 @@ pp.parseNew = function () { let node = this.startNode(); let meta = this.parseIdent(true); - if (this.options.ecmaVersion >= 6 && this.eat(tt.dot)) { + if (this.eat(tt.dot)) { node.meta = meta; node.property = this.parseIdent(true); @@ -605,16 +602,14 @@ pp.parseObj = function (isPattern, refShorthandDefaultPos) { node.properties.push(prop); continue; } - if (this.options.ecmaVersion >= 6) { - prop.method = false; - prop.shorthand = false; - if (isPattern || refShorthandDefaultPos) { - startPos = this.start; - startLoc = this.startLoc; - } - if (!isPattern) - isGenerator = this.eat(tt.star); + prop.method = false; + prop.shorthand = false; + if (isPattern || refShorthandDefaultPos) { + startPos = this.start; + startLoc = this.startLoc; } + if (!isPattern) + isGenerator = this.eat(tt.star); if (this.options.features["es7.asyncFunctions"] && this.isContextual("async")) { if (isGenerator || isPattern) this.unexpected(); var asyncId = this.parseIdent(); @@ -641,14 +636,12 @@ pp.parseObjPropValue = function (prop, startPos, startLoc, isGenerator, isAsync, if (this.eat(tt.colon)) { prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refShorthandDefaultPos); prop.kind = "init"; - } else if (this.options.ecmaVersion >= 6 && this.type === tt.parenL) { + } else if (this.type === tt.parenL) { if (isPattern) this.unexpected(); prop.kind = "init"; prop.method = true; prop.value = this.parseMethod(isGenerator, isAsync); - } else if (this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && - (prop.key.name === "get" || prop.key.name === "set") && - (this.type !== tt.comma && this.type !== tt.braceR)) { + } else if (!prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && (this.type !== tt.comma && this.type !== tt.braceR)) { if (isGenerator || isAsync || isPattern) this.unexpected(); prop.kind = prop.key.name; this.parsePropertyName(prop); @@ -661,7 +654,7 @@ pp.parseObjPropValue = function (prop, startPos, startLoc, isGenerator, isAsync, else this.raise(start, "setter should have exactly one param"); } - } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") { + } else if (!prop.computed && prop.key.type === "Identifier") { prop.kind = "init"; if (isPattern) { if (this.isKeyword(prop.key.name) || @@ -700,10 +693,8 @@ pp.parsePropertyName = function (prop) { pp.initFunction = function (node, isAsync) { node.id = null; - if (this.options.ecmaVersion >= 6) { - node.generator = false; - node.expression = false; - } + node.generator = false; + node.expression = false; if (this.options.features["es7.asyncFunctions"]) { node.async = !!isAsync; } @@ -716,9 +707,7 @@ pp.parseMethod = function (isGenerator, isAsync) { this.initFunction(node, isAsync); this.expect(tt.parenL); node.params = this.parseBindingList(tt.parenR, false, this.options.features["es7.trailingFunctionCommas"]); - if (this.options.ecmaVersion >= 6) { - node.generator = isGenerator; - } + node.generator = isGenerator; this.parseFunctionBody(node); return this.finishNode(node, "FunctionExpression"); }; @@ -807,8 +796,7 @@ pp.parseIdent = function (liberal) { if (!liberal && ((!this.options.allowReserved && this.isReservedWord(this.value)) || (this.strict && reservedWords.strict(this.value)) && - (this.options.ecmaVersion >= 6 || - this.input.slice(this.start, this.end).indexOf("\\") === -1))) + this.input.slice(this.start, this.end).indexOf("\\") === -1)) this.raise(this.start, "The keyword '" + this.value + "' is reserved"); node.name = this.value; } else if (liberal && this.type.keyword) { diff --git a/packages/babylon/src/lval.js b/packages/babylon/src/lval.js index 7b083a0f9c..4c8fd64554 100755 --- a/packages/babylon/src/lval.js +++ b/packages/babylon/src/lval.js @@ -8,7 +8,7 @@ const pp = Parser.prototype; // if possible. pp.toAssignable = function (node, isBinding) { - if (this.options.ecmaVersion >= 6 && node) { + if (node) { switch (node.type) { case "Identifier": case "ObjectPattern": diff --git a/packages/babylon/src/state.js b/packages/babylon/src/state.js index dd48c064e7..37171ecd27 100755 --- a/packages/babylon/src/state.js +++ b/packages/babylon/src/state.js @@ -5,7 +5,7 @@ import { lineBreak } from "./whitespace"; export function Parser(options, input, startPos) { this.options = options; this.sourceFile = this.options.sourceFile || null; - this.isKeyword = keywords[this.options.ecmaVersion >= 6 ? 6 : 5]; + this.isKeyword = keywords[6]; this.isReservedWord = reservedWords[this.options.ecmaVersion]; this.input = input; this.loadPlugins(this.options.plugins); diff --git a/packages/babylon/src/statement.js b/packages/babylon/src/statement.js index bc441511d0..acd7c8d8d4 100755 --- a/packages/babylon/src/statement.js +++ b/packages/babylon/src/statement.js @@ -23,9 +23,7 @@ pp.parseTopLevel = function (node) { } } this.next(); - if (this.options.ecmaVersion >= 6) { - node.sourceType = this.options.sourceType; - } + node.sourceType = this.options.sourceType; return this.finishNode(node, "Program"); }; @@ -55,7 +53,7 @@ pp.parseStatement = function (declaration, topLevel) { case tt._do: return this.parseDoStatement(node); case tt._for: return this.parseForStatement(node); case tt._function: - if (!declaration && this.options.ecmaVersion >= 6) this.unexpected(); + if (!declaration) this.unexpected(); return this.parseFunctionStatement(node); case tt._class: @@ -181,11 +179,7 @@ pp.parseDoStatement = function (node) { this.labels.pop(); this.expect(tt._while); node.test = this.parseParenExpression(); - if (this.options.ecmaVersion >= 6) { - this.eat(tt.semi); - } else { - this.semicolon(); - } + this.eat(tt.semi); return this.finishNode(node, "DoWhileStatement"); }; @@ -211,7 +205,7 @@ pp.parseForStatement = function (node) { this.next(); this.parseVar(init, true, varKind); this.finishNode(init, "VariableDeclaration"); - if ((this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init.declarations.length === 1 && + if ((this.type === tt._in || this.isContextual("of")) && init.declarations.length === 1 && !(varKind !== tt._var && init.declarations[0].init)) return this.parseForIn(node, init); return this.parseFor(node, init); @@ -219,7 +213,7 @@ pp.parseForStatement = function (node) { let refShorthandDefaultPos = {start: 0}; let init = this.parseExpression(true, refShorthandDefaultPos); - if (this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) { + if (this.type === tt._in || this.isContextual("of")) { this.toAssignable(init); this.checkLVal(init); return this.parseForIn(node, init); @@ -459,7 +453,7 @@ pp.parseVar = function (node, isFor, kind) { this.parseVarHead(decl); if (this.eat(tt.eq)) { decl.init = this.parseMaybeAssign(isFor); - } else if (kind === tt._const && !(this.type === tt._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) { + } else if (kind === tt._const && !(this.type === tt._in || this.isContextual("of"))) { this.unexpected(); } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === tt._in || this.isContextual("of")))) { this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value"); @@ -482,9 +476,7 @@ pp.parseVarHead = function (decl) { pp.parseFunction = function (node, isStatement, allowExpressionBody, isAsync) { this.initFunction(node, isAsync); - if (this.options.ecmaVersion >= 6) { - node.generator = this.eat(tt.star); - } + node.generator = this.eat(tt.star); if (isStatement || this.type === tt.name) { node.id = this.parseIdent(); diff --git a/packages/babylon/src/tokenize.js b/packages/babylon/src/tokenize.js index 9d09561bce..ced6aae03a 100755 --- a/packages/babylon/src/tokenize.js +++ b/packages/babylon/src/tokenize.js @@ -213,7 +213,7 @@ pp.readToken_dot = function () { if (next >= 48 && next <= 57) return this.readNumber(true); let next2 = this.input.charCodeAt(this.pos + 2); - if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.' + if (next === 46 && next2 === 46) { // 46 = dot '.' this.pos += 3; return this.finishToken(tt.ellipsis); } else { @@ -315,7 +315,7 @@ pp.readToken_lt_gt = function (code) { // '<>' pp.readToken_eq_excl = function (code) { // '=!' let next = this.input.charCodeAt(this.pos + 1); if (next === 61) return this.finishOp(tt.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2); - if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>' + if (code === 61 && next === 62) { // '=>' this.pos += 2; return this.finishToken(tt.arrow); } @@ -358,10 +358,8 @@ pp.getTokenFromCode = function (code) { case 48: // '0' let next = this.input.charCodeAt(this.pos + 1); if (next === 120 || next === 88) return this.readRadixNumber(16); // '0x', '0X' - hex number - if (this.options.ecmaVersion >= 6) { - if (next === 111 || next === 79) return this.readRadixNumber(8); // '0o', '0O' - octal number - if (next === 98 || next === 66) return this.readRadixNumber(2); // '0b', '0B' - binary number - } + if (next === 111 || next === 79) return this.readRadixNumber(8); // '0o', '0O' - octal number + if (next === 98 || next === 66) return this.readRadixNumber(2); // '0b', '0B' - binary number // Anything else beginning with a digit is an integer, octal // number, or float. case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9 @@ -449,8 +447,7 @@ pp.readRegexp = function() { let mods = this.readWord1(); let tmp = content; if (mods) { - let validFlags = /^[gmsiy]*$/; - if (this.options.ecmaVersion >= 6) validFlags = /^[gmsiyu]*$/; + let validFlags = /^[gmsiyu]*$/; if (!validFlags.test(mods)) this.raise(start, "Invalid regular expression flag"); if (mods.indexOf("u") >= 0 && !regexpUnicodeSupport) { // Replace each astral symbol and every Unicode escape sequence that @@ -693,10 +690,9 @@ var containsEsc; pp.readWord1 = function () { containsEsc = false; let word = "", first = true, chunkStart = this.pos; - let astral = this.options.ecmaVersion >= 6; while (this.pos < this.input.length) { let ch = this.fullCharCodeAtPos(); - if (isIdentifierChar(ch, astral)) { + if (isIdentifierChar(ch, true)) { this.pos += ch <= 0xffff ? 1 : 2; } else if (ch === 92) { // "\" containsEsc = true; @@ -710,7 +706,7 @@ pp.readWord1 = function () { ++this.pos; let esc = this.readCodePoint(); - if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral)) { + if (!(first ? isIdentifierStart : isIdentifierChar)(esc, true)) { this.raise(escStart, "Invalid Unicode escape"); } @@ -730,7 +726,7 @@ pp.readWord1 = function () { pp.readWord = function () { let word = this.readWord1(); let type = tt.name; - if ((this.options.ecmaVersion >= 6 || !containsEsc) && this.isKeyword(word)) + if (!containsEsc && this.isKeyword(word)) type = keywordTypes[word]; return this.finishToken(type, word); };