@@ -11,10 +11,11 @@ impl<'a> Analyzer<'a> {
11
11
if let Some ( keys) = right. get_own_keys ( self ) {
12
12
let dep =
13
13
right. get_destructable ( self , self . factory . consumable ( AstKind2 :: ForInStatement ( node) ) ) ;
14
+ self . push_cf_scope_with_deps ( CfScopeKind :: LoopBreak , vec ! [ dep] , Some ( false ) ) ;
14
15
for ( definite, key) in keys {
15
16
self . push_cf_scope_with_deps (
16
- CfScopeKind :: Loop ,
17
- vec ! [ dep , self . factory. always_mangable_dep( key) ] ,
17
+ CfScopeKind :: LoopContinue ,
18
+ vec ! [ self . factory. always_mangable_dep( key) ] ,
18
19
if definite { Some ( false ) } else { None } ,
19
20
) ;
20
21
self . push_variable_scope ( ) ;
@@ -26,11 +27,17 @@ impl<'a> Analyzer<'a> {
26
27
27
28
self . pop_variable_scope ( ) ;
28
29
self . pop_cf_scope ( ) ;
30
+
31
+ if self . cf_scope ( ) . must_exited ( ) {
32
+ break ;
33
+ }
29
34
}
35
+ self . pop_cf_scope ( ) ;
30
36
} else {
31
37
let dep = self . consumable ( ( AstKind2 :: ForInStatement ( node) , right) ) ;
38
+ self . push_cf_scope_with_deps ( CfScopeKind :: LoopBreak , vec ! [ dep] , Some ( false ) ) ;
32
39
self . exec_loop ( move |analyzer| {
33
- analyzer. push_cf_scope_with_deps ( CfScopeKind :: Loop , vec ! [ dep ] , None ) ;
40
+ analyzer. push_cf_scope_with_deps ( CfScopeKind :: LoopContinue , vec ! [ ] , None ) ;
34
41
analyzer. push_variable_scope ( ) ;
35
42
36
43
analyzer. declare_for_statement_left ( & node. left ) ;
@@ -41,6 +48,7 @@ impl<'a> Analyzer<'a> {
41
48
analyzer. pop_variable_scope ( ) ;
42
49
analyzer. pop_cf_scope ( ) ;
43
50
} ) ;
51
+ self . pop_cf_scope ( ) ;
44
52
}
45
53
}
46
54
}
0 commit comments