mirror of https://github.com/webpack/webpack.git
				
				
				
			
							parent
							
								
									e618bdc6c8
								
							
						
					
					
						commit
						21aa837eb2
					
				|  | @ -675,6 +675,7 @@ Parser.prototype.walkVariableDeclarators = function walkVariableDeclarators(decl | ||||||
| 						if(idx >= 0) _this.scope.definitions.splice(idx, 1); | 						if(idx >= 0) _this.scope.definitions.splice(idx, 1); | ||||||
| 					} | 					} | ||||||
| 				} else { | 				} else { | ||||||
|  | 					_this.walkPattern(declarator.id); | ||||||
| 					_this.enterPattern(declarator.id, function(name, decl) { | 					_this.enterPattern(declarator.id, function(name, decl) { | ||||||
| 						if(!_this.applyPluginsBailResult1("var " + name, decl)) { | 						if(!_this.applyPluginsBailResult1("var " + name, decl)) { | ||||||
| 							_this.scope.renames["$" + name] = undefined; | 							_this.scope.renames["$" + name] = undefined; | ||||||
|  | @ -689,6 +690,37 @@ Parser.prototype.walkVariableDeclarators = function walkVariableDeclarators(decl | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | Parser.prototype.walkPattern = function walkPattern(pattern) { | ||||||
|  | 	if(pattern.type === "Identifier") | ||||||
|  | 		return; | ||||||
|  | 	if(this["walk" + pattern.type]) | ||||||
|  | 		this["walk" + pattern.type](pattern); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Parser.prototype.walkObjectPattern = function walkObjectPattern(pattern) { | ||||||
|  | 	for(var i = 0, len = pattern.properties.length; i < len; i++) { | ||||||
|  | 		var prop = pattern.properties[i]; | ||||||
|  | 		if(prop) { | ||||||
|  | 			if(prop.computed) | ||||||
|  | 				this.walkExpression(prop.key); | ||||||
|  | 			if(prop.value) | ||||||
|  | 				this.walkPattern(prop.value); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Parser.prototype.walkArrayPattern = function walkArrayPattern(pattern) { | ||||||
|  | 	for(var i = 0, len = pattern.elements.length; i < len; i++) { | ||||||
|  | 		var element = pattern.elements[i]; | ||||||
|  | 		if(element) | ||||||
|  | 			this.walkPattern(element); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Parser.prototype.walkRestElement = function walkRestElement(pattern) { | ||||||
|  | 	this.walkPattern(pattern.argument); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| Parser.prototype.walkExpressions = function walkExpressions(expressions) { | Parser.prototype.walkExpressions = function walkExpressions(expressions) { | ||||||
| 	for(var expressionsIndex = 0, len = expressions.length; expressionsIndex < len; expressionsIndex++) { | 	for(var expressionsIndex = 0, len = expressions.length; expressionsIndex < len; expressionsIndex++) { | ||||||
| 		var expression = expressions[expressionsIndex]; | 		var expression = expressions[expressionsIndex]; | ||||||
|  | @ -961,7 +993,7 @@ Parser.prototype.inScope = function inScope(params, fn) { | ||||||
| 		var param = params[paramIndex]; | 		var param = params[paramIndex]; | ||||||
| 
 | 
 | ||||||
| 		if(typeof param !== "string") { | 		if(typeof param !== "string") { | ||||||
| 			param = _this.enterPattern(param, function(param) { | 			_this.enterPattern(param, function(param) { | ||||||
| 				_this.scope.renames["$" + param] = undefined; | 				_this.scope.renames["$" + param] = undefined; | ||||||
| 				_this.scope.definitions.push(param); | 				_this.scope.definitions.push(param); | ||||||
| 			}); | 			}); | ||||||
|  | @ -977,7 +1009,7 @@ Parser.prototype.inScope = function inScope(params, fn) { | ||||||
| 
 | 
 | ||||||
| Parser.prototype.enterPattern = function enterPattern(pattern, onIdent) { | Parser.prototype.enterPattern = function enterPattern(pattern, onIdent) { | ||||||
| 	if(pattern && this["enter" + pattern.type]) | 	if(pattern && this["enter" + pattern.type]) | ||||||
| 		return this["enter" + pattern.type](pattern, onIdent); | 		this["enter" + pattern.type](pattern, onIdent); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| Parser.prototype.enterIdentifier = function enterIdentifier(pattern, onIdent) { | Parser.prototype.enterIdentifier = function enterIdentifier(pattern, onIdent) { | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | module.exports = "a"; | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | export default "b"; | ||||||
|  | @ -0,0 +1,27 @@ | ||||||
|  | import b from "./b"; | ||||||
|  | 
 | ||||||
|  | it("should parse dynamic property names", function() { | ||||||
|  | 	var o = { | ||||||
|  | 		[require("./a")]: "a", | ||||||
|  | 		[b]: "b" | ||||||
|  | 	}; | ||||||
|  | 	o.should.be.eql({ | ||||||
|  | 		a: "a", | ||||||
|  | 		b: "b" | ||||||
|  | 	}); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | it("should match dynamic property names", function() { | ||||||
|  | 	const { | ||||||
|  | 		[require("./a")]: aa, | ||||||
|  | 		[b]: bb | ||||||
|  | 	} = { a: "a", b: "b" }; | ||||||
|  | 	const [x,, ...[{ | ||||||
|  | 		[b]: { | ||||||
|  | 			[b]: cc | ||||||
|  | 		} | ||||||
|  | 	}]] = [0, 1, {b: {b: "c"}}]; | ||||||
|  | 	aa.should.be.eql("a"); | ||||||
|  | 	bb.should.be.eql("b"); | ||||||
|  | 	cc.should.be.eql("c"); | ||||||
|  | }); | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | var supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); | ||||||
|  | var supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); | ||||||
|  | 
 | ||||||
|  | module.exports = function(config) { | ||||||
|  | 	return !config.minimize && supportsIteratorDestructuring() && supportsObjectDestructuring(); | ||||||
|  | }; | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| module.exports = function supportsIteratorDestructuring() { | module.exports = function supportsObjectDestructuring() { | ||||||
| 	try { | 	try { | ||||||
| 		var f = eval("(function f({x, y}) { return x + y; })"); | 		var f = eval("(function f({x, y}) { return x + y; })"); | ||||||
| 		return f({ x: 1, y: 2 }) === 3; | 		return f({ x: 1, y: 2 }) === 3; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue