From 131bd8e6c864c70f85878980d097a0010ac5ffa6 Mon Sep 17 00:00:00 2001 From: David He Date: Thu, 19 Mar 2015 13:09:36 -0700 Subject: [PATCH] ES6: Add support for generators Refs #1033 --- esprima.js | 166 +++++++++-- .../generator/generator-binding-property.js | 3 + .../generator-binding-property.tree.json | 281 ++++++++++++++++++ .../generator-declaration-with-params.js | 1 + ...enerator-declaration-with-params.tree.json | 131 ++++++++ ...nerator-declaration-with-yield-delegate.js | 1 + ...-declaration-with-yield-delegate.tree.json | 131 ++++++++ .../generator-declaration-with-yield.js | 1 + ...generator-declaration-with-yield.tree.json | 131 ++++++++ .../ES6/generator/generator-declaration.js | 1 + .../generator/generator-declaration.tree.json | 76 +++++ .../generator-expression-rest-param.js | 1 + .../generator-expression-rest-param.tree.json | 112 +++++++ .../generator-expression-with-params.js | 1 + ...generator-expression-with-params.tree.json | 131 ++++++++ ...enerator-expression-with-yield-delegate.js | 1 + ...r-expression-with-yield-delegate.tree.json | 185 ++++++++++++ .../generator-expression-with-yield.js | 1 + .../generator-expression-with-yield.tree.json | 131 ++++++++ .../ES6/generator/generator-expression.js | 1 + .../generator/generator-expression.tree.json | 76 +++++ ...ator-invalid-binding-property.failure.json | 1 + .../generator-invalid-binding-property.js | 1 + ...tor-method-with-computed-name.failure.json | 1 + .../generator-method-with-computed-name.js | 3 + ...od-with-invalid-computed-name.failure.json | 1 + ...rator-method-with-invalid-computed-name.js | 1 + .../generator/generator-method-with-params.js | 1 + .../generator-method-with-params.tree.json | 189 ++++++++++++ .../generator-method-with-yield-delegate.js | 1 + ...rator-method-with-yield-delegate.tree.json | 189 ++++++++++++ .../generator-method-with-yield-expression.js | 1 + ...tor-method-with-yield-expression.tree.json | 189 ++++++++++++ ...rator-method-with-yield-line-terminator.js | 4 + ...ethod-with-yield-line-terminator.tree.json | 205 +++++++++++++ .../generator/generator-method-with-yield.js | 1 + .../generator-method-with-yield.tree.json | 170 +++++++++++ .../ES6/generator/generator-method.js | 1 + .../ES6/generator/generator-method.tree.json | 134 +++++++++ ...eter-binding-element-reserved.failure.json | 1 + ...ator-parameter-binding-element-reserved.js | 1 + ...tor-parameter-binding-element.failure.json | 1 + .../generator-parameter-binding-element.js | 3 + ...ter-binding-property-reserved.failure.json | 1 + ...tor-parameter-binding-property-reserved.js | 1 + ...or-parameter-binding-property.failure.json | 1 + .../generator-parameter-binding-property.js | 3 + ...ameter-computed-property-name.failure.json | 1 + ...erator-parameter-computed-property-name.js | 3 + ...meter-invalid-binding-element.failure.json | 1 + ...rator-parameter-invalid-binding-element.js | 3 + ...eter-invalid-binding-property.failure.json | 1 + ...ator-parameter-invalid-binding-property.js | 3 + ...nvalid-computed-property-name.failure.json | 1 + ...arameter-invalid-computed-property-name.js | 3 + ...generator-rest-param-reserved.failure.json | 1 + .../generator-rest-param-reserved.js | 1 + .../ES6/generator/invalid-yield.failure.json | 1 + test/fixtures/ES6/generator/invalid-yield.js | 1 + .../malformed-generator-method-2.failure.json | 1 + .../generator/malformed-generator-method-2.js | 1 + .../malformed-generator-method.failure.json | 1 + .../generator/malformed-generator-method.js | 1 + ...tic-generator-method-with-computed-name.js | 1 + ...erator-method-with-computed-name.tree.json | 152 ++++++++++ .../ES6/generator/static-generator-method.js | 1 + .../static-generator-method.tree.json | 152 ++++++++++ test/fixtures/api/esprima-syntax.result.json | 3 +- 68 files changed, 2977 insertions(+), 24 deletions(-) create mode 100644 test/fixtures/ES6/generator/generator-binding-property.js create mode 100644 test/fixtures/ES6/generator/generator-binding-property.tree.json create mode 100644 test/fixtures/ES6/generator/generator-declaration-with-params.js create mode 100644 test/fixtures/ES6/generator/generator-declaration-with-params.tree.json create mode 100644 test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.js create mode 100644 test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.tree.json create mode 100644 test/fixtures/ES6/generator/generator-declaration-with-yield.js create mode 100644 test/fixtures/ES6/generator/generator-declaration-with-yield.tree.json create mode 100644 test/fixtures/ES6/generator/generator-declaration.js create mode 100644 test/fixtures/ES6/generator/generator-declaration.tree.json create mode 100644 test/fixtures/ES6/generator/generator-expression-rest-param.js create mode 100644 test/fixtures/ES6/generator/generator-expression-rest-param.tree.json create mode 100644 test/fixtures/ES6/generator/generator-expression-with-params.js create mode 100644 test/fixtures/ES6/generator/generator-expression-with-params.tree.json create mode 100644 test/fixtures/ES6/generator/generator-expression-with-yield-delegate.js create mode 100644 test/fixtures/ES6/generator/generator-expression-with-yield-delegate.tree.json create mode 100644 test/fixtures/ES6/generator/generator-expression-with-yield.js create mode 100644 test/fixtures/ES6/generator/generator-expression-with-yield.tree.json create mode 100644 test/fixtures/ES6/generator/generator-expression.js create mode 100644 test/fixtures/ES6/generator/generator-expression.tree.json create mode 100644 test/fixtures/ES6/generator/generator-invalid-binding-property.failure.json create mode 100644 test/fixtures/ES6/generator/generator-invalid-binding-property.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-computed-name.failure.json create mode 100644 test/fixtures/ES6/generator/generator-method-with-computed-name.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.failure.json create mode 100644 test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-params.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-params.tree.json create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield-delegate.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield-delegate.tree.json create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield-expression.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield-expression.tree.json create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.tree.json create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield.js create mode 100644 test/fixtures/ES6/generator/generator-method-with-yield.tree.json create mode 100644 test/fixtures/ES6/generator/generator-method.js create mode 100644 test/fixtures/ES6/generator/generator-method.tree.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-element.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-element.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-property.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-binding-property.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-computed-property-name.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-computed-property-name.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.js create mode 100644 test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.failure.json create mode 100644 test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.js create mode 100644 test/fixtures/ES6/generator/generator-rest-param-reserved.failure.json create mode 100644 test/fixtures/ES6/generator/generator-rest-param-reserved.js create mode 100644 test/fixtures/ES6/generator/invalid-yield.failure.json create mode 100644 test/fixtures/ES6/generator/invalid-yield.js create mode 100644 test/fixtures/ES6/generator/malformed-generator-method-2.failure.json create mode 100644 test/fixtures/ES6/generator/malformed-generator-method-2.js create mode 100644 test/fixtures/ES6/generator/malformed-generator-method.failure.json create mode 100644 test/fixtures/ES6/generator/malformed-generator-method.js create mode 100644 test/fixtures/ES6/generator/static-generator-method-with-computed-name.js create mode 100644 test/fixtures/ES6/generator/static-generator-method-with-computed-name.tree.json create mode 100644 test/fixtures/ES6/generator/static-generator-method.js create mode 100644 test/fixtures/ES6/generator/static-generator-method.tree.json diff --git a/esprima.js b/esprima.js index 7a9661b6a..1a0f5e5ef 100644 --- a/esprima.js +++ b/esprima.js @@ -166,7 +166,8 @@ VariableDeclaration: 'VariableDeclaration', VariableDeclarator: 'VariableDeclarator', WhileStatement: 'WhileStatement', - WithStatement: 'WithStatement' + WithStatement: 'WithStatement', + YieldExpression: 'YieldExpression' }; PlaceHolders = { @@ -194,6 +195,7 @@ IllegalContinue: 'Illegal continue statement', IllegalBreak: 'Illegal break statement', IllegalReturn: 'Illegal return statement', + IllegalYield: 'Illegal yield expression', StrictModeWith: 'Strict mode code may not include a with statement', StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', StrictVarName: 'Variable name may not be eval or arguments in strict mode', @@ -1946,25 +1948,25 @@ return this; }, - finishFunctionDeclaration: function (id, params, defaults, body) { + finishFunctionDeclaration: function (id, params, defaults, body, generator) { this.type = Syntax.FunctionDeclaration; this.id = id; this.params = params; this.defaults = defaults; this.body = body; - this.generator = false; + this.generator = generator; this.expression = false; this.finish(); return this; }, - finishFunctionExpression: function (id, params, defaults, body) { + finishFunctionExpression: function (id, params, defaults, body, generator) { this.type = Syntax.FunctionExpression; this.id = id; this.params = params; this.defaults = defaults; this.body = body; - this.generator = false; + this.generator = generator; this.expression = false; this.finish(); return this; @@ -2274,6 +2276,14 @@ this.source = src; this.finish(); return this; + }, + + finishYieldExpression: function (argument, delegate) { + this.type = Syntax.YieldExpression; + this.arguments = argument; + this.delegate = delegate; + this.finish(); + return this; } }; @@ -2594,6 +2604,7 @@ if (match('=')) { lex(); init = parseAssignmentExpression(); + return node.finishProperty( 'init', key, false, new WrappingNode(key).finishAssignmentPattern(key, init), false, false); @@ -2684,7 +2695,7 @@ // 11.1.5 Object Initialiser - function parsePropertyFunction(node, paramInfo) { + function parsePropertyFunction(node, paramInfo, isGenerator) { var previousStrict, body; isAssignmentTarget = isBindingElement = false; @@ -2700,14 +2711,20 @@ } strict = previousStrict; - return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body); + return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator); } function parsePropertyMethodFunction() { - var params, method, node = new Node(); + var params, method, node = new Node(), + previousAllowYield = state.allowYield; + state.allowYield = false; params = parseParams(); - method = parsePropertyFunction(node, params); + state.allowYield = previousAllowYield; + + state.allowYield = false; + method = parsePropertyFunction(node, params, false); + state.allowYield = previousAllowYield; return method; } @@ -2765,7 +2782,8 @@ // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller // is responsible to visit other options. function tryParseMethodDefinition(token, key, computed, node) { - var value, options, methodNode; + var value, options, methodNode, params, + previousAllowYield = state.allowYield; if (token.type === Token.Identifier) { // check for `get` and `set`; @@ -2776,13 +2794,17 @@ methodNode = new Node(); expect('('); expect(')'); + + state.allowYield = false; value = parsePropertyFunction(methodNode, { params: [], defaults: [], stricted: null, firstRestricted: null, message: null - }); + }, false); + state.allowYield = previousAllowYield; + return node.finishProperty('get', key, computed, value, false, false); } else if (token.value === 'set' && lookaheadPropertyName()) { computed = match('['); @@ -2800,19 +2822,38 @@ if (match(')')) { tolerateUnexpectedToken(lookahead); } else { + state.allowYield = false; parseParam(options); + state.allowYield = previousAllowYield; if (options.defaultCount === 0) { options.defaults = []; } } expect(')'); - value = parsePropertyFunction(methodNode, options); + state.allowYield = false; + value = parsePropertyFunction(methodNode, options, false); + state.allowYield = previousAllowYield; + return node.finishProperty('set', key, computed, value, false, false); } + } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) { + computed = match('['); + key = parseObjectPropertyKey(); + methodNode = new Node(); + + state.allowYield = false; + params = parseParams(); + state.allowYield = previousAllowYield; + + state.allowYield = true; + value = parsePropertyFunction(methodNode, params, true); + state.allowYield = previousAllowYield; + + return node.finishProperty('init', key, computed, value, true, false); } - if (match('(')) { + if (key && match('(')) { value = parsePropertyMethodFunction(); return node.finishProperty('init', key, computed, value, true, false); } @@ -2836,7 +2877,11 @@ var token = lookahead, node = new Node(), computed, key, maybeMethod, value; computed = match('['); - key = parseObjectPropertyKey(); + if (match('*')) { + lex(); + } else { + key = parseObjectPropertyKey(); + } maybeMethod = tryParseMethodDefinition(token, key, computed, node); if (maybeMethod) { @@ -2845,6 +2890,10 @@ return maybeMethod; } + if (!key) { + throwUnexpectedToken(lookahead); + } + // init property or short hand property. checkProto(key, computed, hasProto); @@ -3608,6 +3657,33 @@ return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement); } + // [ES6] 14.4 Yield expression + + function parseYieldExpression() { + var argument, expr, delegate, node = lookahead; + + expr = new Node(); + + expectKeyword('yield'); + + if (!state.allowYield) { + tolerateUnexpectedToken(node, Messages.IllegalYield); + } + + if (!hasLineTerminator) { + delegate = match('*'); + if (delegate) { + lex(); + } + + if (!match(';') && !match('}') && lookahead.type !== Token.EOF) { + argument = parseExpression(); + } + } + + return expr.finishYieldExpression(argument, delegate); + } + // 11.13 Assignment Operators function parseAssignmentExpression() { @@ -3616,6 +3692,10 @@ startToken = lookahead; token = lookahead; + if (matchKeyword('yield')) { + return parseYieldExpression(); + } + expr = parseConditionalExpression(); if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) { @@ -4591,9 +4671,16 @@ } function parseFunctionDeclaration(node, identifierIsOptional) { - var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict; + var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, + isGenerator, previousAllowYield; expectKeyword('function'); + + isGenerator = match('*'); + if (isGenerator) { + lex(); + } + if (!identifierIsOptional || !match('(')) { token = lookahead; id = parseVariableIdentifier(); @@ -4612,7 +4699,11 @@ } } + previousAllowYield = state.allowYield; + state.allowYield = false; tmp = parseParams(firstRestricted); + state.allowYield = previousAllowYield; + params = tmp.params; defaults = tmp.defaults; stricted = tmp.stricted; @@ -4621,7 +4712,9 @@ message = tmp.message; } + previousAllowYield = state.allowYield; previousStrict = strict; + state.allowYield = isGenerator; body = parseFunctionSourceElements(); if (strict && firstRestricted) { throwUnexpectedToken(firstRestricted, message); @@ -4630,16 +4723,23 @@ tolerateUnexpectedToken(stricted, message); } strict = previousStrict; + state.allowYield = previousAllowYield; - return node.finishFunctionDeclaration(id, params, defaults, body); + return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator); } function parseFunctionExpression() { var token, id = null, stricted, firstRestricted, message, tmp, - params = [], defaults = [], body, previousStrict, node = new Node(); + params = [], defaults = [], body, previousStrict, node = new Node(), + isGenerator, previousAllowYield; expectKeyword('function'); + isGenerator = match('*'); + if (isGenerator) { + lex(); + } + if (!match('(')) { token = lookahead; id = parseVariableIdentifier(); @@ -4658,7 +4758,11 @@ } } + previousAllowYield = state.allowYield; + state.allowYield = false; tmp = parseParams(firstRestricted); + state.allowYield = previousAllowYield; + params = tmp.params; defaults = tmp.defaults; stricted = tmp.stricted; @@ -4668,7 +4772,10 @@ } previousStrict = strict; + previousAllowYield = state.allowYield; + state.allowYield = isGenerator; body = parseFunctionSourceElements(); + if (strict && firstRestricted) { throwUnexpectedToken(firstRestricted, message); } @@ -4676,8 +4783,9 @@ tolerateUnexpectedToken(stricted, message); } strict = previousStrict; + state.allowYield = previousAllowYield; - return node.finishFunctionExpression(id, params, defaults, body); + return node.finishFunctionExpression(id, params, defaults, body, isGenerator); } @@ -4696,12 +4804,20 @@ token = lookahead; isStatic = false; computed = match('['); - key = parseObjectPropertyKey(); - if (key.name === 'static' && lookaheadPropertyName()) { + if (match('*')) { + lex(); + } else { + key = parseObjectPropertyKey(); + } + if (key && key.name === 'static' && (lookaheadPropertyName() || match('*'))) { token = lookahead; isStatic = true; computed = match('['); - key = parseObjectPropertyKey(); + if (match('*')) { + lex(); + } else { + key = parseObjectPropertyKey(); + } } method = tryParseMethodDefinition(token, key, computed, method); if (method) { @@ -5127,12 +5243,14 @@ lookahead = null; state = { allowIn: true, + allowYield: false, labelSet: {}, inFunctionBody: false, inIteration: false, inSwitch: false, lastCommentStart: -1, - curlyStack: [] + curlyStack: [], + isGenerator: false }; extra = {}; @@ -5215,12 +5333,14 @@ lookahead = null; state = { allowIn: true, + allowYield: false, labelSet: {}, inFunctionBody: false, inIteration: false, inSwitch: false, lastCommentStart: -1, - curlyStack: [] + curlyStack: [], + isGenerator: false }; sourceType = 'script'; strict = false; diff --git a/test/fixtures/ES6/generator/generator-binding-property.js b/test/fixtures/ES6/generator/generator-binding-property.js new file mode 100644 index 000000000..e3f78445e --- /dev/null +++ b/test/fixtures/ES6/generator/generator-binding-property.js @@ -0,0 +1,3 @@ +(function*(z) { + var {x: y = yield 3} = z; +}) diff --git a/test/fixtures/ES6/generator/generator-binding-property.tree.json b/test/fixtures/ES6/generator/generator-binding-property.tree.json new file mode 100644 index 000000000..d142a2b06 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-binding-property.tree.json @@ -0,0 +1,281 @@ +{ + "range": [ + 0, + 48 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 2 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 48 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 2 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 47 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [ + { + "range": [ + 11, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "Identifier", + "name": "z" + } + ], + "defaults": [], + "body": { + "range": [ + 14, + 47 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 20, + 45 + ], + "loc": { + "start": { + "line": 2, + "column": 4 + }, + "end": { + "line": 2, + "column": 29 + } + }, + "type": "VariableDeclaration", + "declarations": [ + { + "range": [ + 24, + 44 + ], + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 28 + } + }, + "type": "VariableDeclarator", + "id": { + "range": [ + 24, + 40 + ], + "loc": { + "start": { + "line": 2, + "column": 8 + }, + "end": { + "line": 2, + "column": 24 + } + }, + "type": "ObjectPattern", + "properties": [ + { + "range": [ + 25, + 39 + ], + "loc": { + "start": { + "line": 2, + "column": 9 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "type": "Property", + "key": { + "range": [ + 25, + 26 + ], + "loc": { + "start": { + "line": 2, + "column": 9 + }, + "end": { + "line": 2, + "column": 10 + } + }, + "type": "Identifier", + "name": "x" + }, + "computed": false, + "value": { + "range": [ + 28, + 39 + ], + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "type": "AssignmentPattern", + "left": { + "range": [ + 28, + 29 + ], + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 13 + } + }, + "type": "Identifier", + "name": "y" + }, + "right": { + "range": [ + 32, + 39 + ], + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 38, + 39 + ], + "loc": { + "start": { + "line": 2, + "column": 22 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + }, + "delegate": false + } + }, + "kind": "init", + "method": false, + "shorthand": false + } + ] + }, + "init": { + "range": [ + 43, + 44 + ], + "loc": { + "start": { + "line": 2, + "column": 27 + }, + "end": { + "line": 2, + "column": 28 + } + }, + "type": "Identifier", + "name": "z" + } + } + ], + "kind": "var" + } + ] + }, + "generator": true, + "expression": false + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-declaration-with-params.js b/test/fixtures/ES6/generator/generator-declaration-with-params.js new file mode 100644 index 000000000..cdbfd3f4f --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration-with-params.js @@ -0,0 +1 @@ +function *foo(x, y, z) {} diff --git a/test/fixtures/ES6/generator/generator-declaration-with-params.tree.json b/test/fixtures/ES6/generator/generator-declaration-with-params.tree.json new file mode 100644 index 000000000..a91b753cf --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration-with-params.tree.json @@ -0,0 +1,131 @@ +{ + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "FunctionDeclaration", + "id": { + "range": [ + 10, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 13 + } + }, + "type": "Identifier", + "name": "foo" + }, + "params": [ + { + "range": [ + 14, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "Identifier", + "name": "x" + }, + { + "range": [ + 17, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "Identifier", + "name": "y" + }, + { + "range": [ + 20, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 21 + } + }, + "type": "Identifier", + "name": "z" + } + ], + "defaults": [], + "body": { + "range": [ + 23, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.js b/test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.js new file mode 100644 index 000000000..fd4f8e196 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.js @@ -0,0 +1 @@ +function *foo() { yield* 3; } diff --git a/test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.tree.json b/test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.tree.json new file mode 100644 index 000000000..d3686b2a5 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration-with-yield-delegate.tree.json @@ -0,0 +1,131 @@ +{ + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 29 + } + }, + "type": "FunctionDeclaration", + "id": { + "range": [ + 10, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 13 + } + }, + "type": "Identifier", + "name": "foo" + }, + "params": [], + "defaults": [], + "body": { + "range": [ + 16, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 29 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 18, + 27 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 27 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 18, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 25, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 25 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + }, + "delegate": true + } + } + ] + }, + "generator": true, + "expression": false + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-declaration-with-yield.js b/test/fixtures/ES6/generator/generator-declaration-with-yield.js new file mode 100644 index 000000000..52ac303f0 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration-with-yield.js @@ -0,0 +1 @@ +function *foo() { yield 3; } diff --git a/test/fixtures/ES6/generator/generator-declaration-with-yield.tree.json b/test/fixtures/ES6/generator/generator-declaration-with-yield.tree.json new file mode 100644 index 000000000..a32f6d019 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration-with-yield.tree.json @@ -0,0 +1,131 @@ +{ + "range": [ + 0, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 28 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 28 + } + }, + "type": "FunctionDeclaration", + "id": { + "range": [ + 10, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 13 + } + }, + "type": "Identifier", + "name": "foo" + }, + "params": [], + "defaults": [], + "body": { + "range": [ + 16, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 28 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 18, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 18, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 24, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + }, + "delegate": false + } + } + ] + }, + "generator": true, + "expression": false + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-declaration.js b/test/fixtures/ES6/generator/generator-declaration.js new file mode 100644 index 000000000..7c4218962 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration.js @@ -0,0 +1 @@ +function *foo() {} diff --git a/test/fixtures/ES6/generator/generator-declaration.tree.json b/test/fixtures/ES6/generator/generator-declaration.tree.json new file mode 100644 index 000000000..209df44d6 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-declaration.tree.json @@ -0,0 +1,76 @@ +{ + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "FunctionDeclaration", + "id": { + "range": [ + 10, + 13 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 13 + } + }, + "type": "Identifier", + "name": "foo" + }, + "params": [], + "defaults": [], + "body": { + "range": [ + 16, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-expression-rest-param.js b/test/fixtures/ES6/generator/generator-expression-rest-param.js new file mode 100644 index 000000000..855b74300 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-rest-param.js @@ -0,0 +1 @@ +(function*(...x) {}) diff --git a/test/fixtures/ES6/generator/generator-expression-rest-param.tree.json b/test/fixtures/ES6/generator/generator-expression-rest-param.tree.json new file mode 100644 index 000000000..84f092a22 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-rest-param.tree.json @@ -0,0 +1,112 @@ +{ + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [ + { + "range": [ + 11, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "RestElement", + "argument": { + "range": [ + 14, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "Identifier", + "name": "x" + } + } + ], + "defaults": [], + "body": { + "range": [ + 17, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-expression-with-params.js b/test/fixtures/ES6/generator/generator-expression-with-params.js new file mode 100644 index 000000000..49568d61a --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-with-params.js @@ -0,0 +1 @@ +(function*(x, y, z) {}) diff --git a/test/fixtures/ES6/generator/generator-expression-with-params.tree.json b/test/fixtures/ES6/generator/generator-expression-with-params.tree.json new file mode 100644 index 000000000..25a88a74f --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-with-params.tree.json @@ -0,0 +1,131 @@ +{ + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [ + { + "range": [ + 11, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "Identifier", + "name": "x" + }, + { + "range": [ + 14, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "Identifier", + "name": "y" + }, + { + "range": [ + 17, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "Identifier", + "name": "z" + } + ], + "defaults": [], + "body": { + "range": [ + 20, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-expression-with-yield-delegate.js b/test/fixtures/ES6/generator/generator-expression-with-yield-delegate.js new file mode 100644 index 000000000..7d1d130e6 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-with-yield-delegate.js @@ -0,0 +1 @@ +(function*(x, y, z) { yield* x; }) diff --git a/test/fixtures/ES6/generator/generator-expression-with-yield-delegate.tree.json b/test/fixtures/ES6/generator/generator-expression-with-yield-delegate.tree.json new file mode 100644 index 000000000..a5b7e63fe --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-with-yield-delegate.tree.json @@ -0,0 +1,185 @@ +{ + "range": [ + 0, + 34 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 34 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 34 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 34 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 33 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 33 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [ + { + "range": [ + 11, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "Identifier", + "name": "x" + }, + { + "range": [ + 14, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "Identifier", + "name": "y" + }, + { + "range": [ + 17, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "Identifier", + "name": "z" + } + ], + "defaults": [], + "body": { + "range": [ + 20, + 33 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 33 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 22, + 31 + ], + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 31 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 22, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 29, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 29 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "Identifier", + "name": "x" + }, + "delegate": true + } + } + ] + }, + "generator": true, + "expression": false + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-expression-with-yield.js b/test/fixtures/ES6/generator/generator-expression-with-yield.js new file mode 100644 index 000000000..9fcc58a8c --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-with-yield.js @@ -0,0 +1 @@ +(function*() { yield 3; }) diff --git a/test/fixtures/ES6/generator/generator-expression-with-yield.tree.json b/test/fixtures/ES6/generator/generator-expression-with-yield.tree.json new file mode 100644 index 000000000..f1ddfb6fb --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression-with-yield.tree.json @@ -0,0 +1,131 @@ +{ + "range": [ + 0, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 13, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 15, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 15, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 15 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 21, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 21 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + }, + "delegate": false + } + } + ] + }, + "generator": true, + "expression": false + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-expression.js b/test/fixtures/ES6/generator/generator-expression.js new file mode 100644 index 000000000..daa6bf5b2 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression.js @@ -0,0 +1 @@ +(function*() {}) diff --git a/test/fixtures/ES6/generator/generator-expression.tree.json b/test/fixtures/ES6/generator/generator-expression.tree.json new file mode 100644 index 000000000..dd5cd50df --- /dev/null +++ b/test/fixtures/ES6/generator/generator-expression.tree.json @@ -0,0 +1,76 @@ +{ + "range": [ + 0, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 16 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 13, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-invalid-binding-property.failure.json b/test/fixtures/ES6/generator/generator-invalid-binding-property.failure.json new file mode 100644 index 000000000..3ab616073 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-invalid-binding-property.failure.json @@ -0,0 +1 @@ +{"index":12,"lineNumber":1,"column":13,"message":"Error: Line 1: Illegal yield expression","description":"Illegal yield expression"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-invalid-binding-property.js b/test/fixtures/ES6/generator/generator-invalid-binding-property.js new file mode 100644 index 000000000..e6d7b0640 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-invalid-binding-property.js @@ -0,0 +1 @@ +var {x: y = yield 3} = z; diff --git a/test/fixtures/ES6/generator/generator-method-with-computed-name.failure.json b/test/fixtures/ES6/generator/generator-method-with-computed-name.failure.json new file mode 100644 index 000000000..43d4c7468 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-computed-name.failure.json @@ -0,0 +1 @@ +{"index":21,"lineNumber":2,"column":7,"message":"Error: Line 2: Unexpected token *","description":"Unexpected token *"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method-with-computed-name.js b/test/fixtures/ES6/generator/generator-method-with-computed-name.js new file mode 100644 index 000000000..0739904dc --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-computed-name.js @@ -0,0 +1,3 @@ +(function*() { + { *[yield iter]() {} } +}) diff --git a/test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.failure.json b/test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.failure.json new file mode 100644 index 000000000..bda738d6a --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.failure.json @@ -0,0 +1 @@ +{"index":5,"lineNumber":1,"column":6,"message":"Error: Line 1: Illegal yield expression","description":"Illegal yield expression"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.js b/test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.js new file mode 100644 index 000000000..c55ce5513 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-invalid-computed-name.js @@ -0,0 +1 @@ +({ *[yield iter]() {} }) diff --git a/test/fixtures/ES6/generator/generator-method-with-params.js b/test/fixtures/ES6/generator/generator-method-with-params.js new file mode 100644 index 000000000..5d0406eda --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-params.js @@ -0,0 +1 @@ +({ *foo(x, y, z) {} }) diff --git a/test/fixtures/ES6/generator/generator-method-with-params.tree.json b/test/fixtures/ES6/generator/generator-method-with-params.tree.json new file mode 100644 index 000000000..6f6e96806 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-params.tree.json @@ -0,0 +1,189 @@ +{ + "range": [ + 0, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 21 + } + }, + "type": "ObjectExpression", + "properties": [ + { + "range": [ + 3, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "Property", + "key": { + "range": [ + 4, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 7, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [ + { + "range": [ + 8, + 9 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "type": "Identifier", + "name": "x" + }, + { + "range": [ + 11, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "Identifier", + "name": "y" + }, + { + "range": [ + 14, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "Identifier", + "name": "z" + } + ], + "defaults": [], + "body": { + "range": [ + 17, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + }, + "kind": "init", + "method": true, + "shorthand": false + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method-with-yield-delegate.js b/test/fixtures/ES6/generator/generator-method-with-yield-delegate.js new file mode 100644 index 000000000..84c3ef4bd --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield-delegate.js @@ -0,0 +1 @@ +({ *foo() { yield* 3; } }) diff --git a/test/fixtures/ES6/generator/generator-method-with-yield-delegate.tree.json b/test/fixtures/ES6/generator/generator-method-with-yield-delegate.tree.json new file mode 100644 index 000000000..5e38778d1 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield-delegate.tree.json @@ -0,0 +1,189 @@ +{ + "range": [ + 0, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "ObjectExpression", + "properties": [ + { + "range": [ + 3, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "Property", + "key": { + "range": [ + 4, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 7, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 10, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 12, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 21 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 12, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 19, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + }, + "delegate": true + } + } + ] + }, + "generator": true, + "expression": false + }, + "kind": "init", + "method": true, + "shorthand": false + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method-with-yield-expression.js b/test/fixtures/ES6/generator/generator-method-with-yield-expression.js new file mode 100644 index 000000000..e356cfaef --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield-expression.js @@ -0,0 +1 @@ +({ *foo() { yield 3; } }) diff --git a/test/fixtures/ES6/generator/generator-method-with-yield-expression.tree.json b/test/fixtures/ES6/generator/generator-method-with-yield-expression.tree.json new file mode 100644 index 000000000..7718ddd48 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield-expression.tree.json @@ -0,0 +1,189 @@ +{ + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "type": "ObjectExpression", + "properties": [ + { + "range": [ + 3, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "Property", + "key": { + "range": [ + 4, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 7, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 10, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 12, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 12, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "YieldExpression", + "arguments": { + "range": [ + 18, + 19 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 19 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + }, + "delegate": false + } + } + ] + }, + "generator": true, + "expression": false + }, + "kind": "init", + "method": true, + "shorthand": false + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.js b/test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.js new file mode 100644 index 000000000..13ebbabcf --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.js @@ -0,0 +1,4 @@ +({ *foo() { + yield + 3 +} }) diff --git a/test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.tree.json b/test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.tree.json new file mode 100644 index 000000000..5221e76c8 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield-line-terminator.tree.json @@ -0,0 +1,205 @@ +{ + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 4 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 29 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 4 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 4, + "column": 3 + } + }, + "type": "ObjectExpression", + "properties": [ + { + "range": [ + 3, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "type": "Property", + "key": { + "range": [ + 4, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 7, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 10, + 26 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 4, + "column": 1 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 15, + 20 + ], + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 15, + 20 + ], + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 7 + } + }, + "type": "YieldExpression" + } + }, + { + "range": [ + 23, + 24 + ], + "loc": { + "start": { + "line": 3, + "column": 2 + }, + "end": { + "line": 3, + "column": 3 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 23, + 24 + ], + "loc": { + "start": { + "line": 3, + "column": 2 + }, + "end": { + "line": 3, + "column": 3 + } + }, + "type": "Literal", + "value": 3, + "raw": "3" + } + } + ] + }, + "generator": true, + "expression": false + }, + "kind": "init", + "method": true, + "shorthand": false + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method-with-yield.js b/test/fixtures/ES6/generator/generator-method-with-yield.js new file mode 100644 index 000000000..8eea58fd3 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield.js @@ -0,0 +1 @@ +({ *foo() { yield; } }) diff --git a/test/fixtures/ES6/generator/generator-method-with-yield.tree.json b/test/fixtures/ES6/generator/generator-method-with-yield.tree.json new file mode 100644 index 000000000..63d9e8950 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method-with-yield.tree.json @@ -0,0 +1,170 @@ +{ + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 22 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 22 + } + }, + "type": "ObjectExpression", + "properties": [ + { + "range": [ + 3, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "Property", + "key": { + "range": [ + 4, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 7, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 10, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 20 + } + }, + "type": "BlockStatement", + "body": [ + { + "range": [ + 12, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 12, + 17 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 17 + } + }, + "type": "YieldExpression", + "delegate": false + } + } + ] + }, + "generator": true, + "expression": false + }, + "kind": "init", + "method": true, + "shorthand": false + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-method.js b/test/fixtures/ES6/generator/generator-method.js new file mode 100644 index 000000000..c6a22b0ea --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method.js @@ -0,0 +1 @@ +({ *foo() {} }) diff --git a/test/fixtures/ES6/generator/generator-method.tree.json b/test/fixtures/ES6/generator/generator-method.tree.json new file mode 100644 index 000000000..0d4fd2c55 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-method.tree.json @@ -0,0 +1,134 @@ +{ + "range": [ + 0, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 15 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "type": "ExpressionStatement", + "expression": { + "range": [ + 1, + 14 + ], + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "type": "ObjectExpression", + "properties": [ + { + "range": [ + 3, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "Property", + "key": { + "range": [ + 4, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 7, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 10, + 12 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 12 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + }, + "kind": "init", + "method": true, + "shorthand": false + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.failure.json b/test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.failure.json new file mode 100644 index 000000000..9cc37e105 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.failure.json @@ -0,0 +1 @@ +{"index":15,"lineNumber":1,"column":16,"message":"Error: Line 1: Unexpected token yield","description":"Unexpected token yield"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.js b/test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.js new file mode 100644 index 000000000..73b557ee1 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-element-reserved.js @@ -0,0 +1 @@ +(function*({x: yield}) {}) diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-element.failure.json b/test/fixtures/ES6/generator/generator-parameter-binding-element.failure.json new file mode 100644 index 000000000..9338ab44c --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-element.failure.json @@ -0,0 +1 @@ +{"index":27,"lineNumber":2,"column":13,"message":"Error: Line 2: Unexpected token (","description":"Unexpected token ("} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-element.js b/test/fixtures/ES6/generator/generator-parameter-binding-element.js new file mode 100644 index 000000000..c8bbdf1d0 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-element.js @@ -0,0 +1,3 @@ +(function*() { + function(x = yield 3) {} +}) diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.failure.json b/test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.failure.json new file mode 100644 index 000000000..5c985a4fa --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.failure.json @@ -0,0 +1 @@ +{"index":17,"lineNumber":1,"column":18,"message":"Error: Line 1: Unexpected token }","description":"Unexpected token }"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.js b/test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.js new file mode 100644 index 000000000..d36f1062d --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-property-reserved.js @@ -0,0 +1 @@ +(function*({yield}) {}) diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-property.failure.json b/test/fixtures/ES6/generator/generator-parameter-binding-property.failure.json new file mode 100644 index 000000000..9338ab44c --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-property.failure.json @@ -0,0 +1 @@ +{"index":27,"lineNumber":2,"column":13,"message":"Error: Line 2: Unexpected token (","description":"Unexpected token ("} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-binding-property.js b/test/fixtures/ES6/generator/generator-parameter-binding-property.js new file mode 100644 index 000000000..3de539ac3 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-binding-property.js @@ -0,0 +1,3 @@ +(function*() { + function({x: y = yield 3}) {} +}) diff --git a/test/fixtures/ES6/generator/generator-parameter-computed-property-name.failure.json b/test/fixtures/ES6/generator/generator-parameter-computed-property-name.failure.json new file mode 100644 index 000000000..9338ab44c --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-computed-property-name.failure.json @@ -0,0 +1 @@ +{"index":27,"lineNumber":2,"column":13,"message":"Error: Line 2: Unexpected token (","description":"Unexpected token ("} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-computed-property-name.js b/test/fixtures/ES6/generator/generator-parameter-computed-property-name.js new file mode 100644 index 000000000..7bc006407 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-computed-property-name.js @@ -0,0 +1,3 @@ +(function*() { + function({[yield 3]: y}) {} +}) diff --git a/test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.failure.json b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.failure.json new file mode 100644 index 000000000..35319c3de --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.failure.json @@ -0,0 +1 @@ +{"index":28,"lineNumber":2,"column":14,"message":"Error: Line 2: Unexpected token (","description":"Unexpected token ("} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.js b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.js new file mode 100644 index 000000000..bc7938c17 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-element.js @@ -0,0 +1,3 @@ +(function*() { + function*(x = yield 3) {} +}) diff --git a/test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.failure.json b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.failure.json new file mode 100644 index 000000000..35319c3de --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.failure.json @@ -0,0 +1 @@ +{"index":28,"lineNumber":2,"column":14,"message":"Error: Line 2: Unexpected token (","description":"Unexpected token ("} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.js b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.js new file mode 100644 index 000000000..c21963951 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-invalid-binding-property.js @@ -0,0 +1,3 @@ +(function*() { + function*({x: y = yield 3}) {} +}) diff --git a/test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.failure.json b/test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.failure.json new file mode 100644 index 000000000..35319c3de --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.failure.json @@ -0,0 +1 @@ +{"index":28,"lineNumber":2,"column":14,"message":"Error: Line 2: Unexpected token (","description":"Unexpected token ("} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.js b/test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.js new file mode 100644 index 000000000..1ca20284b --- /dev/null +++ b/test/fixtures/ES6/generator/generator-parameter-invalid-computed-property-name.js @@ -0,0 +1,3 @@ +(function*() { + function*({[yield 3]: y}) {} +}) diff --git a/test/fixtures/ES6/generator/generator-rest-param-reserved.failure.json b/test/fixtures/ES6/generator/generator-rest-param-reserved.failure.json new file mode 100644 index 000000000..f49d36a32 --- /dev/null +++ b/test/fixtures/ES6/generator/generator-rest-param-reserved.failure.json @@ -0,0 +1 @@ +{"index":14,"lineNumber":1,"column":15,"message":"Error: Line 1: Unexpected token yield","description":"Unexpected token yield"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/generator-rest-param-reserved.js b/test/fixtures/ES6/generator/generator-rest-param-reserved.js new file mode 100644 index 000000000..63d4e320e --- /dev/null +++ b/test/fixtures/ES6/generator/generator-rest-param-reserved.js @@ -0,0 +1 @@ +(function*(...yield) {}) diff --git a/test/fixtures/ES6/generator/invalid-yield.failure.json b/test/fixtures/ES6/generator/invalid-yield.failure.json new file mode 100644 index 000000000..8a73b9a01 --- /dev/null +++ b/test/fixtures/ES6/generator/invalid-yield.failure.json @@ -0,0 +1 @@ +{"index":14,"lineNumber":1,"column":15,"message":"Error: Line 1: Illegal yield expression","description":"Illegal yield expression"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/invalid-yield.js b/test/fixtures/ES6/generator/invalid-yield.js new file mode 100644 index 000000000..e88270d51 --- /dev/null +++ b/test/fixtures/ES6/generator/invalid-yield.js @@ -0,0 +1 @@ +(function() { yield 3; }) diff --git a/test/fixtures/ES6/generator/malformed-generator-method-2.failure.json b/test/fixtures/ES6/generator/malformed-generator-method-2.failure.json new file mode 100644 index 000000000..11972c389 --- /dev/null +++ b/test/fixtures/ES6/generator/malformed-generator-method-2.failure.json @@ -0,0 +1 @@ +{"index":14,"lineNumber":1,"column":15,"message":"Error: Line 1: Unexpected token }","description":"Unexpected token }"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/malformed-generator-method-2.js b/test/fixtures/ES6/generator/malformed-generator-method-2.js new file mode 100644 index 000000000..0273d50d6 --- /dev/null +++ b/test/fixtures/ES6/generator/malformed-generator-method-2.js @@ -0,0 +1 @@ +class Foo { * } diff --git a/test/fixtures/ES6/generator/malformed-generator-method.failure.json b/test/fixtures/ES6/generator/malformed-generator-method.failure.json new file mode 100644 index 000000000..d10acb08b --- /dev/null +++ b/test/fixtures/ES6/generator/malformed-generator-method.failure.json @@ -0,0 +1 @@ +{"index":5,"lineNumber":1,"column":6,"message":"Error: Line 1: Unexpected token }","description":"Unexpected token }"} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/malformed-generator-method.js b/test/fixtures/ES6/generator/malformed-generator-method.js new file mode 100644 index 000000000..f34ab0f70 --- /dev/null +++ b/test/fixtures/ES6/generator/malformed-generator-method.js @@ -0,0 +1 @@ +({ * }) diff --git a/test/fixtures/ES6/generator/static-generator-method-with-computed-name.js b/test/fixtures/ES6/generator/static-generator-method-with-computed-name.js new file mode 100644 index 000000000..5252f9a97 --- /dev/null +++ b/test/fixtures/ES6/generator/static-generator-method-with-computed-name.js @@ -0,0 +1 @@ +class Foo { static *[foo]() {} } diff --git a/test/fixtures/ES6/generator/static-generator-method-with-computed-name.tree.json b/test/fixtures/ES6/generator/static-generator-method-with-computed-name.tree.json new file mode 100644 index 000000000..233101860 --- /dev/null +++ b/test/fixtures/ES6/generator/static-generator-method-with-computed-name.tree.json @@ -0,0 +1,152 @@ +{ + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 32 + } + }, + "type": "ClassDeclaration", + "id": { + "range": [ + 6, + 9 + ], + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "type": "Identifier", + "name": "Foo" + }, + "superClass": null, + "body": { + "range": [ + 10, + 32 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 32 + } + }, + "type": "ClassBody", + "body": [ + { + "range": [ + 12, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "MethodDefinition", + "key": { + "range": [ + 21, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 21 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": true, + "value": { + "range": [ + 25, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 25 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 28, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 28 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + }, + "kind": "method", + "static": true + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/ES6/generator/static-generator-method.js b/test/fixtures/ES6/generator/static-generator-method.js new file mode 100644 index 000000000..6644eb190 --- /dev/null +++ b/test/fixtures/ES6/generator/static-generator-method.js @@ -0,0 +1 @@ +class Foo { static *foo() {} } diff --git a/test/fixtures/ES6/generator/static-generator-method.tree.json b/test/fixtures/ES6/generator/static-generator-method.tree.json new file mode 100644 index 000000000..ba94364e2 --- /dev/null +++ b/test/fixtures/ES6/generator/static-generator-method.tree.json @@ -0,0 +1,152 @@ +{ + "range": [ + 0, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "Program", + "body": [ + { + "range": [ + 0, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "ClassDeclaration", + "id": { + "range": [ + 6, + 9 + ], + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "type": "Identifier", + "name": "Foo" + }, + "superClass": null, + "body": { + "range": [ + 10, + 30 + ], + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 30 + } + }, + "type": "ClassBody", + "body": [ + { + "range": [ + 12, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 28 + } + }, + "type": "MethodDefinition", + "key": { + "range": [ + 20, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "type": "Identifier", + "name": "foo" + }, + "computed": false, + "value": { + "range": [ + 23, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 28 + } + }, + "type": "FunctionExpression", + "id": null, + "params": [], + "defaults": [], + "body": { + "range": [ + 26, + 28 + ], + "loc": { + "start": { + "line": 1, + "column": 26 + }, + "end": { + "line": 1, + "column": 28 + } + }, + "type": "BlockStatement", + "body": [] + }, + "generator": true, + "expression": false + }, + "kind": "method", + "static": true + } + ] + } + } + ] +} \ No newline at end of file diff --git a/test/fixtures/api/esprima-syntax.result.json b/test/fixtures/api/esprima-syntax.result.json index 84d966c63..35897ca9b 100644 --- a/test/fixtures/api/esprima-syntax.result.json +++ b/test/fixtures/api/esprima-syntax.result.json @@ -60,5 +60,6 @@ "VariableDeclaration": "VariableDeclaration", "VariableDeclarator": "VariableDeclarator", "WhileStatement": "WhileStatement", - "WithStatement": "WithStatement" + "WithStatement": "WithStatement", + "YieldExpression": "YieldExpression" }