Blame view

node_modules/webpack/lib/dependencies/getFunctionExpression.js 1.29 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  module.exports = function(expr) {
  	// <FunctionExpression>
  	if(expr.type === "FunctionExpression" || expr.type === "ArrowFunctionExpression") {
  		return {
  			fn: expr,
  			expressions: [],
  			needThis: false
  		};
  	}
  
  	// <FunctionExpression>.bind(<Expression>)
  	if(expr.type === "CallExpression" &&
  		expr.callee.type === "MemberExpression" &&
  		expr.callee.object.type === "FunctionExpression" &&
  		expr.callee.property.type === "Identifier" &&
  		expr.callee.property.name === "bind" &&
  		expr.arguments.length === 1) {
  		return {
  			fn: expr.callee.object,
  			expressions: [expr.arguments[0]]
  		};
  	}
  	// (function(_this) {return <FunctionExpression>})(this) (Coffeescript)
  	if(expr.type === "CallExpression" &&
  		expr.callee.type === "FunctionExpression" &&
  		expr.callee.body.type === "BlockStatement" &&
  		expr.arguments.length === 1 &&
  		expr.arguments[0].type === "ThisExpression" &&
  		expr.callee.body.body &&
  		expr.callee.body.body.length === 1 &&
  		expr.callee.body.body[0].type === "ReturnStatement" &&
  		expr.callee.body.body[0].argument &&
  		expr.callee.body.body[0].argument.type === "FunctionExpression") {
  		return {
  			fn: expr.callee.body.body[0].argument,
  			expressions: [],
  			needThis: true
  		};
  	}
  };