5
* LICENSE file in the root directory of this source tree.
6
*/
7
8
-import type {Effect, ValueKind} from 'babel-plugin-react-compiler/src';
8
+import type {
9
+ Effect,
10
+ ValueKind,
11
+ ValueReason,
12
+} from 'babel-plugin-react-compiler/src';
13
import type {TypeConfig} from 'babel-plugin-react-compiler/src/HIR/TypeSchema';
14
15
export function makeSharedRuntimeTypeProvider({
16
EffectEnum,
17
ValueKindEnum,
18
+ ValueReasonEnum,
19
}: {
20
EffectEnum: typeof Effect;
21
ValueKindEnum: typeof ValueKind;
22
+ ValueReasonEnum: typeof ValueReason;
23
}) {
24
return function sharedRuntimeTypeProvider(
25
moduleName: string,
91
effects: [{kind: 'Assign', from: '@value', into: '@return'}],
92
},
93
},
94
+ typedAssign: {
95
+ kind: 'function',
96
+ positionalParams: [EffectEnum.Read],
97
+ restParam: null,
98
+ calleeEffect: EffectEnum.Read,
99
+ returnType: {kind: 'type', name: 'Any'},
100
+ returnValueKind: ValueKindEnum.Mutable,
101
+ aliasing: {
102
+ receiver: '@receiver',
103
+ params: ['@value'],
104
+ rest: null,
105
+ returns: '@return',
106
+ temporaries: [],
107
+ effects: [{kind: 'Assign', from: '@value', into: '@return'}],
108
+ },
109
+ },
110
+ typedAlias: {
111
+ kind: 'function',
112
+ positionalParams: [EffectEnum.Read],
113
+ restParam: null,
114
+ calleeEffect: EffectEnum.Read,
115
+ returnType: {kind: 'type', name: 'Any'},
116
+ returnValueKind: ValueKindEnum.Mutable,
117
+ aliasing: {
118
+ receiver: '@receiver',
119
+ params: ['@value'],
120
+ rest: null,
121
+ returns: '@return',
122
+ temporaries: [],
123
+ effects: [
124
+ {
125
+ kind: 'Create',
126
+ into: '@return',
127
+ value: ValueKindEnum.Mutable,
128
+ reason: ValueReasonEnum.KnownReturnSignature,
129
+ },
130
+ {kind: 'Alias', from: '@value', into: '@return'},
131
+ ],
132
+ },
133
+ },
134
+ typedCapture: {
135
+ kind: 'function',
136
+ positionalParams: [EffectEnum.Read],
137
+ restParam: null,
138
+ calleeEffect: EffectEnum.Read,
139
+ returnType: {kind: 'type', name: 'Array'},
140
+ returnValueKind: ValueKindEnum.Mutable,
141
+ aliasing: {
142
+ receiver: '@receiver',
143
+ params: ['@value'],
144
+ rest: null,
145
+ returns: '@return',
146
+ temporaries: [],
147
+ effects: [
148
+ {
149
+ kind: 'Create',
150
+ into: '@return',
151
+ value: ValueKindEnum.Mutable,
152
+ reason: ValueReasonEnum.KnownReturnSignature,
153
+ },
154
+ {kind: 'Capture', from: '@value', into: '@return'},
155
+ ],
156
+ },
157
+ },
158
+ typedCreateFrom: {
159
+ kind: 'function',
160
+ positionalParams: [EffectEnum.Read],
161
+ restParam: null,
162
+ calleeEffect: EffectEnum.Read,
163
+ returnType: {kind: 'type', name: 'Any'},
164
+ returnValueKind: ValueKindEnum.Mutable,
165
+ aliasing: {
166
+ receiver: '@receiver',
167
+ params: ['@value'],
168
+ rest: null,
169
+ returns: '@return',
170
+ temporaries: [],
171
+ effects: [{kind: 'CreateFrom', from: '@value', into: '@return'}],
172
+ },
173
+ },
174
+ typedMutate: {
175
+ kind: 'function',
176
+ positionalParams: [EffectEnum.Read, EffectEnum.Capture],
177
+ restParam: null,
178
+ calleeEffect: EffectEnum.Store,
179
+ returnType: {kind: 'type', name: 'Primitive'},
180
+ returnValueKind: ValueKindEnum.Primitive,
181
+ aliasing: {
182
+ receiver: '@receiver',
183
+ params: ['@object', '@value'],
184
+ rest: null,
185
+ returns: '@return',
186
+ temporaries: [],
187
+ effects: [
188
+ {
189
+ kind: 'Create',
190
+ into: '@return',
191
+ value: ValueKindEnum.Primitive,
192
+ reason: ValueReasonEnum.KnownReturnSignature,
193
+ },
194
+ {kind: 'Mutate', value: '@object'},
195
+ {kind: 'Capture', from: '@value', into: '@object'},
196
+ ],
197
+ },
198
+ },
199
},
200
};
201
} else if (moduleName === 'ReactCompilerTest') {