@@ -311,15 +311,21 @@ class Parser extends Tapable {
311311 if ( expr . argument . type === "Identifier" ) {
312312 name = this . scope . renames . get ( expr . argument . name ) || expr . argument . name ;
313313 if ( ! this . scope . definitions . has ( name ) ) {
314- res = this . hooks . evaluateTypeof . for ( name ) . call ( expr ) ;
315- if ( res !== undefined ) return res ;
314+ const hook = this . hooks . evaluateTypeof . get ( name ) ;
315+ if ( hook !== undefined ) {
316+ res = hook . call ( expr ) ;
317+ if ( res !== undefined ) return res ;
318+ }
316319 }
317320 }
318321 if ( expr . argument . type === "MemberExpression" ) {
319322 const exprName = this . getNameForExpression ( expr . argument ) ;
320323 if ( exprName && exprName . free ) {
321- res = this . hooks . evaluateTypeof . for ( exprName . name ) . call ( expr ) ;
322- if ( res !== undefined ) return res ;
324+ const hook = this . hooks . evaluateTypeof . get ( exprName . name ) ;
325+ if ( hook !== undefined ) {
326+ res = hook . call ( expr ) ;
327+ if ( res !== undefined ) return res ;
328+ }
323329 }
324330 }
325331 if ( expr . argument . type === "FunctionExpression" ) {
@@ -352,30 +358,45 @@ class Parser extends Tapable {
352358 this . plugin ( "evaluate Identifier" , expr => {
353359 const name = this . scope . renames . get ( expr . name ) || expr . name ;
354360 if ( ! this . scope . definitions . has ( expr . name ) ) {
355- const result = this . hooks . evaluateIdentifier . for ( name ) . call ( expr ) ;
356- if ( result ) return result ;
361+ const hook = this . hooks . evaluateIdentifier . get ( name ) ;
362+ if ( hook !== undefined ) {
363+ const result = hook . call ( expr ) ;
364+ if ( result ) return result ;
365+ }
357366 return new BasicEvaluatedExpression ( ) . setIdentifier ( name ) . setRange ( expr . range ) ;
358367 } else {
359- return this . hooks . evaluateDefinedIdentifier . for ( name ) . call ( expr ) ;
368+ const hook = this . hooks . evaluateDefinedIdentifier . get ( name ) ;
369+ if ( hook !== undefined ) {
370+ return hook . call ( expr ) ;
371+ }
360372 }
361373 } ) ;
362374 this . plugin ( "evaluate ThisExpression" , expr => {
363375 const name = this . scope . renames . get ( "this" ) ;
364376 if ( name ) {
365- const result = this . hooks . evaluateIdentifier . for ( name ) . call ( expr ) ;
366- if ( result ) return result ;
377+ const hook = this . hooks . evaluateIdentifier . get ( name ) ;
378+ if ( hook !== undefined ) {
379+ const result = hook . call ( expr ) ;
380+ if ( result ) return result ;
381+ }
367382 return new BasicEvaluatedExpression ( ) . setIdentifier ( name ) . setRange ( expr . range ) ;
368383 }
369384 } ) ;
370385 this . plugin ( "evaluate MemberExpression" , expression => {
371386 let exprName = this . getNameForExpression ( expression ) ;
372387 if ( exprName ) {
373388 if ( exprName . free ) {
374- const result = this . hooks . evaluateIdentifier . for ( exprName . name ) . call ( expression ) ;
375- if ( result ) return result ;
389+ const hook = this . hooks . evaluateIdentifier . get ( exprName . name ) ;
390+ if ( hook !== undefined ) {
391+ const result = hook . call ( expression ) ;
392+ if ( result ) return result ;
393+ }
376394 return new BasicEvaluatedExpression ( ) . setIdentifier ( exprName . name ) . setRange ( expression . range ) ;
377395 } else {
378- return this . hooks . evaluateDefinedIdentifier . for ( exprName . name ) . call ( expression ) ;
396+ const hook = this . hooks . evaluateDefinedIdentifier . get ( exprName . name ) ;
397+ if ( hook !== undefined ) {
398+ return hook . call ( expression ) ;
399+ }
379400 }
380401 }
381402 } ) ;
@@ -385,7 +406,10 @@ class Parser extends Tapable {
385406 const param = this . evaluateExpression ( expr . callee . object ) ;
386407 if ( ! param ) return ;
387408 const property = expr . callee . property . name || expr . callee . property . value ;
388- return this . hooks . evaluateCallExpressionMember . for ( property ) . call ( expr , param ) ;
409+ const hook = this . hooks . evaluateCallExpressionMember . get ( property ) ;
410+ if ( hook !== undefined ) {
411+ return hook . call ( expr , param ) ;
412+ }
389413 } ) ;
390414 this . plugin ( "evaluate CallExpression .replace" , ( expr , param ) => {
391415 if ( ! param . isString ( ) ) return ;
@@ -631,9 +655,13 @@ class Parser extends Tapable {
631655 }
632656
633657 walkLabeledStatement ( statement ) {
634- const result = this . hooks . label . for ( statement . label . name ) . call ( statement ) ;
635- if ( result !== true )
636- this . walkStatement ( statement . body ) ;
658+ const hook = this . hooks . label . get ( statement . label . name ) ;
659+ if ( hook !== undefined ) {
660+ const result = hook . call ( statement ) ;
661+ if ( result === true )
662+ return ;
663+ }
664+ this . walkStatement ( statement . body ) ;
637665 }
638666
639667 prewalkWithStatement ( statement ) {
@@ -938,8 +966,10 @@ class Parser extends Tapable {
938966 const hookMap = declarator . kind === "const" ? this . hooks . varDeclarationConst :
939967 declarator . kind === "let" ? this . hooks . varDeclarationLet :
940968 this . hooks . varDeclarationVar ;
941- if ( ! hookMap . for ( name ) . call ( decl ) ) {
942- if ( ! this . hooks . varDeclaration . for ( name ) . call ( decl ) ) {
969+ const hook = hookMap . get ( name ) ;
970+ if ( hook === undefined || ! hook . call ( decl ) ) {
971+ const hook = this . hooks . varDeclaration . get ( name ) ;
972+ if ( hook === undefined || ! hook . call ( decl ) ) {
943973 this . scope . renames . set ( name , null ) ;
944974 this . scope . definitions . add ( name ) ;
945975 }
@@ -957,17 +987,21 @@ class Parser extends Tapable {
957987 case "VariableDeclarator" :
958988 {
959989 const renameIdentifier = declarator . init && this . getRenameIdentifier ( declarator . init ) ;
960- if ( renameIdentifier && declarator . id . type === "Identifier" && this . hooks . canRename . for ( renameIdentifier ) . call ( declarator . init ) ) {
961- // renaming with "var a = b;"
962- if ( ! this . hooks . rename . for ( renameIdentifier ) . call ( declarator . init ) ) {
963- this . scope . renames . set ( declarator . id . name , this . scope . renames . get ( renameIdentifier ) || renameIdentifier ) ;
964- this . scope . definitions . delete ( declarator . id . name ) ;
990+ if ( renameIdentifier && declarator . id . type === "Identifier" ) {
991+ const hook = this . hooks . canRename . get ( renameIdentifier ) ;
992+ if ( hook !== undefined && hook . call ( declarator . init ) ) {
993+ // renaming with "var a = b;"
994+ const hook = this . hooks . rename . get ( renameIdentifier ) ;
995+ if ( hook === undefined || ! hook . call ( declarator . init ) ) {
996+ this . scope . renames . set ( declarator . id . name , this . scope . renames . get ( renameIdentifier ) || renameIdentifier ) ;
997+ this . scope . definitions . delete ( declarator . id . name ) ;
998+ }
999+ break ;
9651000 }
966- } else {
967- this . walkPattern ( declarator . id ) ;
968- if ( declarator . init )
969- this . walkExpression ( declarator . init ) ;
9701001 }
1002+ this . walkPattern ( declarator . id ) ;
1003+ if ( declarator . init )
1004+ this . walkExpression ( declarator . init ) ;
9711005 break ;
9721006 }
9731007 }
@@ -1093,9 +1127,12 @@ class Parser extends Tapable {
10931127 if ( expression . operator === "typeof" ) {
10941128 const exprName = this . getNameForExpression ( expression . argument ) ;
10951129 if ( exprName && exprName . free ) {
1096- const result = this . hooks . typeof . for ( exprName . name ) . call ( expression ) ;
1097- if ( result === true )
1098- return ;
1130+ const hook = this . hooks . typeof . get ( exprName . name ) ;
1131+ if ( hook !== undefined ) {
1132+ const result = hook . call ( expression ) ;
1133+ if ( result === true )
1134+ return ;
1135+ }
10991136 }
11001137 }
11011138 this . walkExpression ( expression . argument ) ;
@@ -1116,27 +1153,35 @@ class Parser extends Tapable {
11161153
11171154 walkAssignmentExpression ( expression ) {
11181155 const renameIdentifier = this . getRenameIdentifier ( expression . right ) ;
1119- if ( expression . left . type === "Identifier" && renameIdentifier && this . hooks . canRename . for ( renameIdentifier ) . call ( expression . right ) ) {
1120- // renaming "a = b;"
1121- if ( ! this . hooks . rename . for ( renameIdentifier ) . call ( expression . right ) ) {
1122- this . scope . renames . set ( expression . left . name , renameIdentifier ) ;
1123- this . scope . definitions . delete ( expression . left . name ) ;
1156+ if ( expression . left . type === "Identifier" && renameIdentifier ) {
1157+ const hook = this . hooks . canRename . get ( renameIdentifier ) ;
1158+ if ( hook !== undefined && hook . call ( expression . right ) ) {
1159+ // renaming "a = b;"
1160+ const hook = this . hooks . rename . get ( renameIdentifier ) ;
1161+ if ( hook === undefined || ! hook . call ( expression . right ) ) {
1162+ this . scope . renames . set ( expression . left . name , renameIdentifier ) ;
1163+ this . scope . definitions . delete ( expression . left . name ) ;
1164+ }
1165+ return ;
11241166 }
1125- } else if ( expression . left . type === "Identifier" ) {
1126- if ( ! this . hooks . assigned . for ( expression . left . name ) . call ( expression ) ) {
1167+ }
1168+ if ( expression . left . type === "Identifier" ) {
1169+ const assignedHook = this . hooks . assigned . get ( expression . left . name ) ;
1170+ if ( assignedHook === undefined || ! assignedHook . call ( expression ) ) {
11271171 this . walkExpression ( expression . right ) ;
11281172 }
11291173 this . scope . renames . set ( expression . left . name , null ) ;
1130- if ( ! this . hooks . assign . for ( expression . left . name ) . call ( expression ) ) {
1174+ const assignHook = this . hooks . assign . get ( expression . left . name ) ;
1175+ if ( assignHook === undefined || ! assignHook . call ( expression ) ) {
11311176 this . walkExpression ( expression . left ) ;
11321177 }
1133- } else {
1134- this . walkExpression ( expression . right ) ;
1135- this . walkPattern ( expression . left ) ;
1136- this . enterPattern ( expression . left , ( name , decl ) => {
1137- this . scope . renames . set ( name , null ) ;
1138- } ) ;
1178+ return ;
11391179 }
1180+ this . walkExpression ( expression . right ) ;
1181+ this . walkPattern ( expression . left ) ;
1182+ this . enterPattern ( expression . left , ( name , decl ) => {
1183+ this . scope . renames . set ( name , null ) ;
1184+ } ) ;
11401185 }
11411186
11421187 walkConditionalExpression ( expression ) {
@@ -1187,9 +1232,13 @@ class Parser extends Tapable {
11871232 const walkIIFE = ( functionExpression , options , currentThis ) => {
11881233 const renameArgOrThis = argOrThis => {
11891234 const renameIdentifier = this . getRenameIdentifier ( argOrThis ) ;
1190- if ( renameIdentifier && this . hooks . canRename . for ( renameIdentifier ) . call ( argOrThis ) ) {
1191- if ( ! this . hooks . rename . for ( renameIdentifier ) . call ( argOrThis ) )
1192- return renameIdentifier ;
1235+ if ( renameIdentifier ) {
1236+ const hook = this . hooks . canRename . get ( renameIdentifier ) ;
1237+ if ( hook !== undefined && hook . call ( argOrThis ) ) {
1238+ const hook = this . hooks . rename . get ( renameIdentifier ) ;
1239+ if ( hook === undefined || ! hook . call ( argOrThis ) )
1240+ return renameIdentifier ;
1241+ }
11931242 }
11941243 this . walkExpression ( argOrThis ) ;
11951244 } ;
@@ -1236,15 +1285,21 @@ class Parser extends Tapable {
12361285
12371286 const callee = this . evaluateExpression ( expression . callee ) ;
12381287 if ( callee . isIdentifier ( ) ) {
1239- result = this . hooks . call . for ( callee . identifier ) . call ( expression ) ;
1240- if ( result === true )
1241- return ;
1242- let identifier = callee . identifier . replace ( / \. [ ^ . ] + $ / , "" ) ;
1243- if ( identifier !== callee . identifier ) {
1244- result = this . hooks . callAnyMember . for ( identifier ) . call ( expression ) ;
1288+ const callHook = this . hooks . call . get ( callee . identifier ) ;
1289+ if ( callHook !== undefined ) {
1290+ result = callHook . call ( expression ) ;
12451291 if ( result === true )
12461292 return ;
12471293 }
1294+ let identifier = callee . identifier . replace ( / \. [ ^ . ] + $ / , "" ) ;
1295+ if ( identifier !== callee . identifier ) {
1296+ const callAnyHook = this . hooks . callAnyMember . get ( identifier ) ;
1297+ if ( callAnyHook !== undefined ) {
1298+ result = callAnyHook . call ( expression ) ;
1299+ if ( result === true )
1300+ return ;
1301+ }
1302+ }
12481303 }
12491304
12501305 if ( expression . callee )
@@ -1257,12 +1312,18 @@ class Parser extends Tapable {
12571312 walkMemberExpression ( expression ) {
12581313 const exprName = this . getNameForExpression ( expression ) ;
12591314 if ( exprName && exprName . free ) {
1260- let result = this . hooks . expression . for ( exprName . name ) . call ( expression ) ;
1261- if ( result === true )
1262- return ;
1263- result = this . hooks . expressionAnyMember . for ( exprName . nameGeneral ) . call ( expression ) ;
1264- if ( result === true )
1265- return ;
1315+ const expressionHook = this . hooks . expression . get ( exprName . name ) ;
1316+ if ( expressionHook !== undefined ) {
1317+ const result = expressionHook . call ( expression ) ;
1318+ if ( result === true )
1319+ return ;
1320+ }
1321+ const expressionAnyMemberHook = this . hooks . expressionAnyMember . get ( exprName . nameGeneral ) ;
1322+ if ( expressionAnyMemberHook !== undefined ) {
1323+ const result = expressionAnyMemberHook . call ( expression ) ;
1324+ if ( result === true )
1325+ return ;
1326+ }
12661327 }
12671328 this . walkExpression ( expression . object ) ;
12681329 if ( expression . computed === true )
@@ -1271,9 +1332,12 @@ class Parser extends Tapable {
12711332
12721333 walkIdentifier ( expression ) {
12731334 if ( ! this . scope . definitions . has ( expression . name ) ) {
1274- const result = this . hooks . expression . for ( this . scope . renames . get ( expression . name ) || expression . name ) . call ( expression ) ;
1275- if ( result === true )
1276- return ;
1335+ const hook = this . hooks . expression . for ( this . scope . renames . get ( expression . name ) || expression . name ) ;
1336+ if ( hook !== undefined ) {
1337+ const result = hook . call ( expression ) ;
1338+ if ( result === true )
1339+ return ;
1340+ }
12771341 }
12781342 }
12791343
@@ -1339,9 +1403,12 @@ class Parser extends Tapable {
13391403
13401404 evaluateExpression ( expression ) {
13411405 try {
1342- const result = this . hooks . evaluate . for ( expression . type ) . call ( expression ) ;
1343- if ( result !== undefined )
1344- return result ;
1406+ const hook = this . hooks . evaluate . get ( expression . type ) ;
1407+ if ( hook !== undefined ) {
1408+ const result = hook . call ( expression ) ;
1409+ if ( result !== undefined )
1410+ return result ;
1411+ }
13451412 } catch ( e ) {
13461413 console . warn ( e ) ;
13471414 // ignore error
0 commit comments