Commit bf0cefe
Robert Jackson
Ensure global member expressions are not shared.
The original fix in b63bb6e attempted to cache the generated member
expressions, so that we didn't do duplicated work for each reference to
a given global. Unfortunately, this optimization failed to take into
consideration that most babel plugins work by directly mutating the node
in question. In practice what that meant was that once _any_ usage of a
given global was needed to be transformed (e.g. say you had
`computed(...args, function(){})` and are transpiling for IE11), then
all usages of that global would be mutated.
A more concrete example.
```js
// input
import { computed } from '@ember/object';
function specialComputed(dependentKeys) {
return computed(...dependentKeys, function() {});
}
function otherLessSpecialComputed() {
return computed('stuff', 'hard', 'coded', function() {});
}
```
In this example, the first method (`specialComputed`) needs to be
transpiled to something akin to (most of the changes here are from
`@babel/plugin-transform-spread`):
```js
function specialComputed(dependentKeys) {
return Ember.computed.apply(Ember, dependentKeys.concat([function() {}]));
}
```
Unfortunately, since the generated `MemberExpression` for
`Ember.computed` is shared, this forced the other `computed` usage to be
transpiled to:
```js
function otherLessSpecialComputed() {
return Ember.computed.apply('stuff', 'hard', 'coded', function() {});
}
```
Which is clearly, **totally** invalid. 🤦1 parent 1431b51 commit bf0cefe
1 file changed
Lines changed: 11 additions & 18 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
29 | | - | |
30 | 28 | | |
31 | 29 | | |
32 | 30 | | |
| |||
43 | 41 | | |
44 | 42 | | |
45 | 43 | | |
46 | | - | |
47 | | - | |
48 | | - | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
49 | 53 | | |
50 | | - | |
| 54 | + | |
51 | 55 | | |
52 | 56 | | |
53 | 57 | | |
54 | | - | |
| 58 | + | |
55 | 59 | | |
56 | 60 | | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | 61 | | |
69 | 62 | | |
70 | 63 | | |
| |||
0 commit comments