Skip to content

Commit fb0e4ee

Browse files
dannysufacebook-github-bot
authored andcommitted
Enable regenerator for Hermes dev mode transform profile (#52651)
Summary: Pull Request resolved: #52651 Changelog: [Internal] Last year the `hermes-canary` profile was used to enable certain apps to use Static Hermes by enabling regenerator because debugger support for generator wasn't finished yet. However, we actually could have just keyed off of `options.dev` and still kept using `hermes-stable`. The `hermes-canary` profile is actually meant to be used to run experiments. We should free up this profile to return it to the original intended purpose. This diff makes all hermes profiles' dev mode use regenerator. Existing SH apps using `hermes-canary` should be unaffected. And apps using Hermes will change to use regenerator in dev mode, but that should be ok. Reviewed By: robhogan Differential Revision: D78450695 fbshipit-source-id: eb6a87fbc1f0e08d490fd0d1baa3611248f95764
1 parent e17e3e3 commit fb0e4ee

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)