@@ -38,16 +38,21 @@ function isFirstParty(fileName) {
3838// use `this.foo = bar` instead of `this.defineProperty('foo', ...)`
3939const loose = true ;
4040
41- // For Static Hermes testing (experimental), the hermes-canary transformProfile
42- // is used to enable regenerator (and some related lowering passes) because SH
43- // requires more Babel lowering than Hermes temporarily.
4441const getPreset = ( src , options ) => {
4542 const transformProfile =
4643 ( options && options . unstable_transformProfile ) || 'default' ;
4744 const isHermesStable = transformProfile === 'hermes-stable' ;
4845 const isHermesCanary = transformProfile === 'hermes-canary' ;
4946 const isHermes = isHermesStable || isHermesCanary ;
5047
48+ // We enable regenerator for !isHermes. Additionally, in dev mode we also
49+ // enable regenerator for the time being because Static Hermes doesn't yet
50+ // support debugging native generators. However, some apps have native
51+ // generators in release mode because it has already yielded perf wins. The
52+ // next release of Static Hermes will close this gap, so this won't be
53+ // permanent.
54+ const enableRegenerator = ! isHermes || options . dev ;
55+
5156 const isNull = src == null ;
5257 const hasClass = isNull || src . indexOf ( 'class' ) !== - 1 ;
5358
@@ -111,8 +116,8 @@ const getPreset = (src, options) => {
111116 extraPlugins . push ( [
112117 require ( '@babel/plugin-transform-named-capturing-groups-regex' ) ,
113118 ] ) ;
114- // Needed for regenerator for hermes-canary
115- if ( isHermesCanary ) {
119+ // Needed for regenerator
120+ if ( isHermes && enableRegenerator ) {
116121 extraPlugins . push ( [
117122 require ( '@babel/plugin-transform-optional-catch-binding' ) ,
118123 ] ) ;
@@ -145,17 +150,15 @@ const getPreset = (src, options) => {
145150 ) {
146151 extraPlugins . push ( [ require ( '@babel/plugin-transform-react-display-name' ) ] ) ;
147152 }
148- // Check !isHermesStable because this is needed for regenerator for
149- // hermes-canary
150- if ( ! isHermesStable && ( isNull || src . indexOf ( '?.' ) !== - 1 ) ) {
153+ // This is also needed for regenerator
154+ if ( enableRegenerator && ( isNull || src . indexOf ( '?.' ) !== - 1 ) ) {
151155 extraPlugins . push ( [
152156 require ( '@babel/plugin-transform-optional-chaining' ) ,
153157 { loose : true } ,
154158 ] ) ;
155159 }
156- // Check !isHermesStable because this is needed for regenerator for
157- // hermes-canary
158- if ( ! isHermesStable && ( isNull || src . indexOf ( '??' ) !== - 1 ) ) {
160+ // This is also needed for regenerator
161+ if ( enableRegenerator && ( isNull || src . indexOf ( '??' ) !== - 1 ) ) {
159162 extraPlugins . push ( [
160163 require ( '@babel/plugin-transform-nullish-coalescing-operator' ) ,
161164 { loose : true } ,
@@ -183,7 +186,7 @@ const getPreset = (src, options) => {
183186 extraPlugins . push ( [ require ( '@babel/plugin-transform-react-jsx-self' ) ] ) ;
184187 }
185188
186- if ( isHermesCanary ) {
189+ if ( isHermes && enableRegenerator ) {
187190 const hasForOf =
188191 isNull || ( src . indexOf ( 'for' ) !== - 1 && src . indexOf ( 'of' ) !== - 1 ) ;
189192 if ( hasForOf ) {
@@ -203,11 +206,11 @@ const getPreset = (src, options) => {
203206 require ( '@babel/plugin-transform-runtime' ) ,
204207 {
205208 helpers : true ,
206- regenerator : ! isHermesStable ,
209+ regenerator : enableRegenerator ,
207210 ...( isVersion && { version : options . enableBabelRuntime } ) ,
208211 } ,
209212 ] ) ;
210- } else if ( isHermesCanary ) {
213+ } else if ( isHermes && enableRegenerator ) {
211214 extraPlugins . push ( [ require ( '@babel/plugin-transform-regenerator' ) ] ) ;
212215 }
213216
0 commit comments