@@ -549,17 +549,40 @@ Parser.prototype.walkExpression = function walkExpression(expression) {
549
549
this . walkExpressions ( expression . arguments ) ;
550
550
break ;
551
551
case "CallExpression" :
552
- var callee = this . evaluateExpression ( expression . callee ) ;
553
- if ( callee . isIdentifier ( ) ) {
554
- var result = this . applyPluginsBailResult ( "call " + callee . identifier , expression ) ;
555
- if ( result === true )
556
- break ;
557
- }
552
+ if ( expression . callee . type === "FunctionExpression" && expression . arguments ) {
553
+ // (function(...) { }(...))
554
+ var args = expression . arguments . map ( function ( arg ) {
555
+ var result = this . evaluateExpression ( arg ) ;
556
+ if ( ! result . isIdentifier ( ) ) result = undefined ;
557
+ if ( ! result ) {
558
+ this . walkExpression ( arg ) ;
559
+ return ;
560
+ }
561
+ return result . identifier ;
562
+ } , this ) ;
563
+ this . inScope ( expression . callee . params . filter ( function ( identifier , idx ) {
564
+ return identifier . name !== args [ idx ] ;
565
+ } ) , function ( ) {
566
+ if ( expression . callee . body . type === "BlockStatement" )
567
+ this . walkStatement ( expression . callee . body ) ;
568
+ else
569
+ this . walkExpression ( expression . callee . body ) ;
570
+ } . bind ( this ) ) ;
558
571
559
- if ( expression . callee )
560
- this . walkExpression ( expression . callee ) ;
561
- if ( expression . arguments )
562
- this . walkExpressions ( expression . arguments ) ;
572
+ } else {
573
+
574
+ var callee = this . evaluateExpression ( expression . callee ) ;
575
+ if ( callee . isIdentifier ( ) ) {
576
+ var result = this . applyPluginsBailResult ( "call " + callee . identifier , expression ) ;
577
+ if ( result === true )
578
+ break ;
579
+ }
580
+
581
+ if ( expression . callee )
582
+ this . walkExpression ( expression . callee ) ;
583
+ if ( expression . arguments )
584
+ this . walkExpressions ( expression . arguments ) ;
585
+ }
563
586
break ;
564
587
case "MemberExpression" :
565
588
var expr = expression ;
0 commit comments