Skip to content

Commit 28031f6

Browse files
Danny Sufacebook-github-bot
authored andcommitted
Enable regenerator for Hermes dev mode transform profile (#52651)
Summary: Changelog: [Internal] Reviewed By: robhogan Differential Revision: D78450695
1 parent 48bf59c commit 28031f6

File tree

1 file changed

+17
-14
lines changed
  • packages/react-native-babel-preset/src/configs

1 file changed

+17
-14
lines changed

packages/react-native-babel-preset/src/configs/main.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,21 @@ function isFirstParty(fileName) {
3838
// use `this.foo = bar` instead of `this.defineProperty('foo', ...)`
3939
const 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.
4441
const 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

Comments
 (0)