Skip to content

Commit 04e6f4c

Browse files
johnniwintherCommit Queue
authored and
Commit Queue
committed
[kernel] Add VariableDeclaration.isSynthesized
This adds an [isSynthesized] flag to the [VariableDeclaration] the signal when the variable doesn't correspond to a variable in the source code. The name of a variable can only be `null` if it is synthesized. Partially in response to #51554 TEST=existing Change-Id: I94591971f11da09d210c8b25a2d05e22ca05dc62 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/286961 Reviewed-by: Joshua Litt <[email protected]> Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Chloe Stefantsova <[email protected]> Reviewed-by: Alexander Markov <[email protected]>
1 parent 7b64d76 commit 04e6f4c

File tree

1,717 files changed

+7033
-6927
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,717 files changed

+7033
-6927
lines changed

pkg/_js_interop_checks/lib/src/transformations/export_creator.dart

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ class ExportCreator extends Transformer {
173173
returnType ??= _typeEnvironment.coreTypes.objectNonNullableRawType;
174174

175175
var dartInstance = VariableDeclaration('#dartInstance',
176-
initializer: node.arguments.positional[0], type: dartType)
176+
initializer: node.arguments.positional[0],
177+
type: dartType,
178+
isSynthesized: true)
177179
..fileOffset = node.fileOffset
178180
..parent = node.parent;
179181
block.add(dartInstance);
@@ -193,7 +195,8 @@ class ExportCreator extends Transformer {
193195

194196
var jsExporter = VariableDeclaration('#jsExporter',
195197
initializer: AsExpression(getLiteral(proto), returnType),
196-
type: returnType)
198+
type: returnType,
199+
isSynthesized: true)
197200
..fileOffset = node.fileOffset
198201
..parent = node.parent;
199202
block.add(jsExporter);
@@ -258,7 +261,7 @@ class ExportCreator extends Transformer {
258261
// A new map VariableDeclaration is created and added to the block of
259262
// statements for each export name.
260263
var getSetMap = VariableDeclaration('#${exportName}Mapping',
261-
initializer: getLiteral(), type: _objectType)
264+
initializer: getLiteral(), type: _objectType, isSynthesized: true)
262265
..fileOffset = node.fileOffset
263266
..parent = node.parent;
264267
block.add(getSetMap);
@@ -283,10 +286,10 @@ class ExportCreator extends Transformer {
283286
]))));
284287
}
285288
if (setter != null) {
286-
var setterParameter =
287-
VariableDeclaration('#val', type: setter.setterType)
288-
..fileOffset = node.fileOffset
289-
..parent = node.parent;
289+
var setterParameter = VariableDeclaration('#val',
290+
type: setter.setterType, isSynthesized: true)
291+
..fileOffset = node.fileOffset
292+
..parent = node.parent;
290293
block.add(setProperty(
291294
VariableGet(getSetMap),
292295
'set',

pkg/compiler/lib/src/kernel/transformations/late_lowering.dart

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ class LateLowering {
229229
initializer:
230230
_callCellConstructor(_nameLiteral(name, fileOffset), fileOffset),
231231
type: InterfaceType(_coreTypes.cellClass, nonNullable),
232-
isFinal: true)
232+
isFinal: true,
233+
isSynthesized: true)
233234
..fileOffset = fileOffset;
234235

235236
return _addToCurrentScope(variable, cell);
@@ -255,7 +256,8 @@ class LateLowering {
255256
_initializerClosure(variable.initializer!, variable.type),
256257
fileOffset),
257258
type: InterfaceType(_coreTypes.initializedCellClass, nonNullable),
258-
isFinal: true)
259+
isFinal: true,
260+
isSynthesized: true)
259261
..fileOffset = fileOffset;
260262
return _addToCurrentScope(variable, cell);
261263
}
@@ -349,8 +351,9 @@ class LateLowering {
349351
..fileOffset = fileOffset
350352
..isNonNullableByDefault = true;
351353

352-
VariableDeclaration setterValue = VariableDeclaration('value', type: type)
353-
..fileOffset = fileOffset;
354+
VariableDeclaration setterValue =
355+
VariableDeclaration('value', type: type, isSynthesized: true)
356+
..fileOffset = fileOffset;
354357
VariableGet setterValueRead() =>
355358
VariableGet(setterValue)..fileOffset = fileOffset;
356359

@@ -456,12 +459,15 @@ class LateLowering {
456459
// }
457460
// return value;
458461
// }
459-
VariableDeclaration value =
460-
VariableDeclaration('value', initializer: fieldRead(), type: type)
461-
..fileOffset = fileOffset;
462+
VariableDeclaration value = VariableDeclaration('value',
463+
initializer: fieldRead(), type: type, isSynthesized: true)
464+
..fileOffset = fileOffset;
462465
VariableGet valueRead() => VariableGet(value)..fileOffset = fileOffset;
463466
VariableDeclaration result = VariableDeclaration('result',
464-
initializer: initializer, type: type, isFinal: true)
467+
initializer: initializer,
468+
type: type,
469+
isFinal: true,
470+
isSynthesized: true)
465471
..fileOffset = fileOffset;
466472
VariableGet resultRead() =>
467473
VariableGet(result)..fileOffset = fileOffset;
@@ -510,9 +516,9 @@ class LateLowering {
510516
//
511517
// This lowering avoids generating an extra narrowing node in inference,
512518
// but the generated code is worse due to poor register allocation.
513-
VariableDeclaration value =
514-
VariableDeclaration('value', initializer: fieldRead(), type: type)
515-
..fileOffset = fileOffset;
519+
VariableDeclaration value = VariableDeclaration('value',
520+
initializer: fieldRead(), type: type, isSynthesized: true)
521+
..fileOffset = fileOffset;
516522
VariableGet valueRead() => VariableGet(value)..fileOffset = fileOffset;
517523
return Block([
518524
value,
@@ -541,8 +547,9 @@ class LateLowering {
541547
_copyAnnotations(getter, field);
542548
enclosingClass.addProcedure(getter);
543549

544-
VariableDeclaration setterValue = VariableDeclaration('value', type: type)
545-
..fileOffset = fileOffset;
550+
VariableDeclaration setterValue =
551+
VariableDeclaration('value', type: type, isSynthesized: true)
552+
..fileOffset = fileOffset;
546553
VariableGet setterValueRead() =>
547554
VariableGet(setterValue)..fileOffset = fileOffset;
548555

pkg/compiler/lib/src/kernel/transformations/list_factory_specializer.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,10 @@ class ListFactorySpecializer extends BaseSpecializer {
9393
Expression getLength() {
9494
if (lengthConstant != null) return IntLiteral(lengthConstant);
9595
lengthVariable ??= VariableDeclaration('_length',
96-
initializer: length, isFinal: true, type: intType)
96+
initializer: length,
97+
isFinal: true,
98+
type: intType,
99+
isSynthesized: true)
97100
..fileOffset = node.fileOffset;
98101
return VariableGet(lengthVariable!)..fileOffset = node.fileOffset;
99102
}
@@ -112,12 +115,14 @@ class ListFactorySpecializer extends BaseSpecializer {
112115
isFinal: true,
113116
type: InterfaceType(
114117
_jsArrayClass, Nullability.nonNullable, [...args.types]),
118+
isSynthesized: true,
115119
)..fileOffset = node.fileOffset;
116120

117121
final indexVariable = VariableDeclaration(
118122
_indexNameFromContext(generator),
119123
initializer: IntLiteral(0),
120124
type: intType,
125+
isSynthesized: true,
121126
)..fileOffset = node.fileOffset;
122127
indexVariable.fileOffset =
123128
generator.function.positionalParameters.first.fileOffset;
@@ -285,7 +290,8 @@ class ListGenerateLoopBodyInliner extends CloneVisitorNotMembers {
285290
final closureParameter = function.positionalParameters.single;
286291
parameter = VariableDeclaration(argument.name,
287292
initializer: VariableGet(argument)..fileOffset = argument.fileOffset,
288-
type: closureParameter.type)
293+
type: closureParameter.type,
294+
isSynthesized: true)
289295
..fileOffset = closureParameter.fileOffset;
290296
this.argument = argument;
291297
setVariableClone(closureParameter, parameter);

pkg/dart2wasm/lib/ffi_native_transformer.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ class WasmFfiNativeTransformer extends FfiNativeTransformer {
176176
wasmImportProcedureArgs.add(VariableDeclaration(
177177
node.function.positionalParameters[i].name!,
178178
type: argWasmType,
179+
isSynthesized: true,
179180
));
180181
}
181182
}

pkg/dart2wasm/lib/js_runtime_generator.dart

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -497,19 +497,19 @@ class _JSLowerer extends Transformer {
497497
// before being invoked. If the callback takes optional parameters then, the
498498
// second argument will be a `double` indicating the last defined argument.
499499
int parameterId = 1;
500-
final callbackVariable =
501-
VariableDeclaration('callback', type: _nonNullableObjectType);
500+
final callbackVariable = VariableDeclaration('callback',
501+
type: _nonNullableObjectType, isSynthesized: true);
502502
VariableDeclaration? argumentsLength;
503503
if (_needsArgumentsLength(function)) {
504504
argumentsLength = VariableDeclaration('argumentsLength',
505-
type: _coreTypes.doubleNonNullableRawType);
505+
type: _coreTypes.doubleNonNullableRawType, isSynthesized: true);
506506
}
507507

508508
// Initialize variable declarations.
509509
List<VariableDeclaration> positionalParameters = [];
510510
for (int j = 0; j < function.positionalParameters.length; j++) {
511511
positionalParameters.add(VariableDeclaration('x${parameterId++}',
512-
type: _nullableWasmExternRefType));
512+
type: _nullableWasmExternRefType, isSynthesized: true));
513513
}
514514

515515
// Build the body of a function trampoline. To support default arguments, we
@@ -584,7 +584,7 @@ class _JSLowerer extends Transformer {
584584
FunctionNode(null,
585585
positionalParameters: [
586586
VariableDeclaration('dartFunction',
587-
type: _nonNullableWasmExternRefType)
587+
type: _nonNullableWasmExternRefType, isSynthesized: true)
588588
],
589589
returnType: _nonNullableWasmExternRefType),
590590
fileUri,
@@ -631,8 +631,8 @@ class _JSLowerer extends Transformer {
631631
_createFunctionTrampoline(node, type, boxExternRef: false);
632632
Procedure jsWrapperFunction =
633633
_getJSWrapperFunction(type, functionTrampolineName, node.fileUri);
634-
VariableDeclaration v =
635-
VariableDeclaration('#var', initializer: argument, type: type);
634+
VariableDeclaration v = VariableDeclaration('#var',
635+
initializer: argument, type: type, isSynthesized: true);
636636
return Let(
637637
v,
638638
ConditionalExpression(
@@ -700,7 +700,7 @@ class _JSLowerer extends Transformer {
700700
for (int j = 0; j < originalParameters.length; j++) {
701701
String parameterString = 'x$j';
702702
dartPositionalParameters.add(VariableDeclaration(parameterString,
703-
type: _nullableWasmExternRefType));
703+
type: _nullableWasmExternRefType, isSynthesized: true));
704704
jsParameterStrings.add(parameterString);
705705
}
706706

@@ -764,7 +764,9 @@ class _JSLowerer extends Transformer {
764764
if (returnType == _coreTypes.intNullableRawType ||
765765
returnType == _coreTypes.intNonNullableRawType) {
766766
VariableDeclaration v = VariableDeclaration('#var',
767-
initializer: expression, type: returnTypeOverride);
767+
initializer: expression,
768+
type: returnTypeOverride,
769+
isSynthesized: true);
768770
return Let(
769771
v,
770772
ConditionalExpression(
@@ -884,8 +886,8 @@ class _JSLowerer extends Transformer {
884886
Expression originalArgument = originalArguments[j];
885887
String parameterString = 'x$j';
886888
DartType type = originalArgument.getStaticType(_staticTypeContext);
887-
dartPositionalParameters
888-
.add(VariableDeclaration(parameterString, type: type));
889+
dartPositionalParameters.add(VariableDeclaration(parameterString,
890+
type: type, isSynthesized: true));
889891
if (originalArgument is! VariableGet) {
890892
allArgumentsAreGet = false;
891893
}

pkg/dart2wasm/lib/record_class_generator.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,9 @@ class _RecordClassGenerator {
174174
/// Generate a constructor with name `_`. Named fields are passed in sorted
175175
/// order.
176176
Constructor _generateConstructor(RecordShape shape, List<Field> fields) {
177-
final List<VariableDeclaration> positionalParameters =
178-
List.generate(fields.length, (i) => VariableDeclaration('field$i'));
177+
final List<VariableDeclaration> positionalParameters = List.generate(
178+
fields.length,
179+
(i) => VariableDeclaration('field$i', isSynthesized: true));
179180

180181
final List<Initializer> initializers = List.generate(
181182
fields.length,
@@ -295,8 +296,8 @@ class _RecordClassGenerator {
295296
Nullability.nonNullable,
296297
);
297298

298-
final VariableDeclaration parameter =
299-
VariableDeclaration('other', type: nullableObjectType);
299+
final VariableDeclaration parameter = VariableDeclaration('other',
300+
type: nullableObjectType, isSynthesized: true);
300301

301302
final List<Statement> statements = [];
302303

pkg/dart2wasm/lib/transformers.dart

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,15 @@ class _WasmTransformer extends Transformer {
206206

207207
final iterator = VariableDeclaration("#forIterator",
208208
initializer: iteratorInitializer..fileOffset = iterable.fileOffset,
209-
type: iteratorType)
209+
type: iteratorType,
210+
isSynthesized: true)
210211
..fileOffset = iterable.fileOffset;
211212

212213
// Only used when `isAsync` is true.
213214
final jumpSentinel = VariableDeclaration("#jumpSentinel",
214215
initializer: ConstantExpression(BoolConstant(false)),
215-
type: InterfaceType(coreTypes.boolClass, Nullability.nonNullable));
216+
type: InterfaceType(coreTypes.boolClass, Nullability.nonNullable),
217+
isSynthesized: true);
216218

217219
final condition = InstanceInvocation(InstanceAccessKind.Instance,
218220
VariableGet(iterator), Name('moveNext'), Arguments(const []),
@@ -373,13 +375,15 @@ class _WasmTransformer extends Transformer {
373375
Arguments([], types: [coreTypes.objectNullableRawType]));
374376
final controller = VariableDeclaration('#controller',
375377
initializer: controllerInitializer..fileOffset = fileOffset,
376-
type: controllerNullableObjectType)
378+
type: controllerNullableObjectType,
379+
isSynthesized: true)
377380
..fileOffset = fileOffset;
378381

379382
// Initialize `#completer`.
380383
final completer = VariableDeclaration('#completer',
381384
initializer: _completerBoolInitializer()..fileOffset = fileOffset,
382-
type: completerBoolType)
385+
type: completerBoolType,
386+
isSynthesized: true)
383387
..fileOffset = fileOffset;
384388

385389
// Close `#controller`.
@@ -426,7 +430,8 @@ class _WasmTransformer extends Transformer {
426430
bodyFunction.computeThisFunctionType(Nullability.nonNullable);
427431
final body = VariableDeclaration('#body',
428432
initializer: bodyInitializer..fileOffset = fileOffset,
429-
type: bodyFunctionType)
433+
type: bodyFunctionType,
434+
isSynthesized: true)
430435
..fileOffset = fileOffset;
431436

432437
// Invoke body.
@@ -438,12 +443,14 @@ class _WasmTransformer extends Transformer {
438443
final isEven = VariableDeclaration('#isEven',
439444
initializer: ConstantExpression(BoolConstant(false))
440445
..fileOffset = fileOffset,
441-
type: coreTypes.boolNonNullableRawType)
446+
type: coreTypes.boolNonNullableRawType,
447+
isSynthesized: true)
442448
..fileOffset = fileOffset;
443449
final isFirst = VariableDeclaration('#isFirst',
444450
initializer: ConstantExpression(BoolConstant(true))
445451
..fileOffset = fileOffset,
446-
type: coreTypes.boolNonNullableRawType)
452+
type: coreTypes.boolNonNullableRawType,
453+
isSynthesized: true)
447454
..fileOffset = fileOffset;
448455

449456
// Get `controller.stream`
@@ -467,8 +474,8 @@ class _WasmTransformer extends Transformer {
467474
completerComplete.function
468475
.computeThisFunctionType(Nullability.nonNullable))
469476
as FunctionType;
470-
final completerPrePassArg =
471-
VariableDeclaration('value', type: coreTypes.objectNullableRawType);
477+
final completerPrePassArg = VariableDeclaration('value',
478+
type: coreTypes.objectNullableRawType, isSynthesized: true);
472479
final completerPrePass = FunctionExpression(FunctionNode(
473480
Block([
474481
IfStatement(
@@ -518,11 +525,12 @@ class _WasmTransformer extends Transformer {
518525
functionType: asyncMapType);
519526

520527
// Call `where`.
521-
final whereFilterArg =
522-
VariableDeclaration('value', type: coreTypes.objectNullableRawType);
528+
final whereFilterArg = VariableDeclaration('value',
529+
type: coreTypes.objectNullableRawType, isSynthesized: true);
523530
final whereKeep = VariableDeclaration('keep',
524531
initializer: VariableGet(isEven),
525-
type: coreTypes.boolNonNullableRawType);
532+
type: coreTypes.boolNonNullableRawType,
533+
isSynthesized: true);
526534

527535
final whereFilter = FunctionExpression(FunctionNode(
528536
Block([
@@ -611,7 +619,8 @@ class _WasmTransformer extends Transformer {
611619
awaitVarType = yieldExpressionType.typeArguments.single;
612620
}
613621
}
614-
awaitForVar = VariableDeclaration('#awaitForVar', type: awaitVarType)
622+
awaitForVar = VariableDeclaration('#awaitForVar',
623+
type: awaitVarType, isSynthesized: true)
615624
..fileOffset = fileOffset;
616625
}
617626

pkg/dev_compiler/lib/src/kernel/compiler.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4843,20 +4843,20 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
48434843
js_ast.Catch? _visitCatch(List<Catch> clauses) {
48444844
if (clauses.isEmpty) return null;
48454845

4846-
var caughtError = VariableDeclaration('#e');
4846+
var caughtError = VariableDeclaration('#e', isSynthesized: true);
48474847
var savedRethrow = _rethrowParameter;
48484848
_rethrowParameter = caughtError;
48494849

48504850
// If we have more than one catch clause, always create a temporary so we
48514851
// don't shadow any names.
48524852
var exceptionParameter =
48534853
(clauses.length == 1 ? clauses[0].exception : null) ??
4854-
VariableDeclaration('#ex');
4854+
VariableDeclaration('#ex', isSynthesized: true);
48554855

48564856
var stackTraceParameter =
48574857
(clauses.length == 1 ? clauses[0].stackTrace : null) ??
48584858
(clauses.any((c) => c.stackTrace != null)
4859-
? VariableDeclaration('#st')
4859+
? VariableDeclaration('#st', isSynthesized: true)
48604860
: null);
48614861

48624862
js_ast.Statement catchBody = js_ast.Throw(_emitVariableRef(caughtError));

pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ class FormalParameterBuilder extends ModifierBuilderImpl
166166
isCovariantByDeclaration: isCovariantByDeclaration,
167167
isRequired: isRequiredNamed,
168168
hasDeclaredInitializer: hasDeclaredInitializer,
169-
isLowered: isExtensionThis)
169+
isLowered: isExtensionThis,
170+
isSynthesized: name == noNameSentinel)
170171
..fileOffset = charOffset;
171172
}
172173
return variable!;

0 commit comments

Comments
 (0)