Skip to content

Commit 43cacaf

Browse files
vsmenoncommit-bot@chromium.org
authored andcommitted
Revert "[dartdevc] fix for const / overridden fields"
This is breaking Flutter Web - see: flutter/flutter#40876 Will need to reopen: #38455 Change-Id: I6942cdc136533286c3a5eee93439d4f0f9beb28b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118261 Reviewed-by: Vijay Menon <[email protected]> Reviewed-by: Mark Zhou <[email protected]> Commit-Queue: Vijay Menon <[email protected]>
1 parent ff0e8f8 commit 43cacaf

File tree

4 files changed

+6
-53
lines changed

4 files changed

+6
-53
lines changed

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ abstract class SharedCompiler<Library, Class, InterfaceType, FunctionNode> {
252252
/// runtime call.
253253
js_ast.TemporaryId initPrivateNameSymbol() {
254254
var idName = name.endsWith('=') ? name.replaceAll('=', '_') : name;
255-
idName = idName.replaceAll('.', '_');
256255
var id = js_ast.TemporaryId(idName);
257256
moduleItems.add(js.statement('const # = #.privateName(#, #)',
258257
[id, runtimeModule, emitLibraryName(library), js.string(name)]));
@@ -263,16 +262,6 @@ abstract class SharedCompiler<Library, Class, InterfaceType, FunctionNode> {
263262
return privateNames.putIfAbsent(name, initPrivateNameSymbol);
264263
}
265264

266-
/// Emits a private name JS Symbol for [name] unique to a Dart class [cls].
267-
///
268-
/// This is now required for fields of constant objects that may be
269-
/// overridden within the same library.
270-
@protected
271-
js_ast.TemporaryId emitClassPrivateNameSymbol(
272-
Library library, String className, String memberName) {
273-
return emitPrivateNameSymbol(library, '$className.$memberName');
274-
}
275-
276265
/// Emits an expression to set the property [nameExpr] on the class [className],
277266
/// with [value].
278267
///

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2796,9 +2796,10 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
27962796

27972797
void _emitVirtualFieldSymbols(Class c, List<js_ast.Statement> body) {
27982798
_classProperties.virtualFields.forEach((field, virtualField) {
2799-
var symbol = emitClassPrivateNameSymbol(
2800-
c.enclosingLibrary, getLocalClassName(c), field.name.name);
2801-
body.add(js.statement('const # = #;', [virtualField, symbol]));
2799+
body.add(js.statement('const # = Symbol(#);', [
2800+
virtualField,
2801+
js.string('${getLocalClassName(c)}.${field.name.name}')
2802+
]));
28022803
});
28032804
}
28042805

@@ -5407,15 +5408,8 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
54075408
entryToProperty(MapEntry<Reference, Constant> entry) {
54085409
var constant = visitConstant(entry.value);
54095410
var member = entry.key.asField;
5410-
var cls = member.enclosingClass;
5411-
// Enums cannot be overridden, so we can safely use the field name
5412-
// directly. Otherwise, use a private symbol in case the field
5413-
// was overridden.
5414-
var symbol = cls.isEnum
5415-
? _emitMemberName(member.name.name, member: member)
5416-
: emitClassPrivateNameSymbol(
5417-
cls.enclosingLibrary, getLocalClassName(cls), member.name.name);
5418-
return js_ast.Property(symbol, constant);
5411+
return js_ast.Property(
5412+
_emitMemberName(member.name.name, member: member), constant);
54195413
}
54205414

54215415
var type = visitInterfaceType(node.getType(_types) as InterfaceType);

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,6 @@ class _LibraryVirtualFieldModel {
161161
if (_extensiblePrivateClasses.contains(class_)) return true;
162162
}
163163

164-
if (class_.constructors.any((c) => c.isConst)) {
165-
// Always virtualize fields of a (might be) non-enum (see above) const
166-
// class. The way these are lowered by the CFE, they need to be
167-
// writable from different modules even if overridden.
168-
return true;
169-
}
170-
171164
// Otherwise, the field is effectively private and we only need to make it
172165
// virtual if it's overridden.
173166
return _overriddenPrivateFields.contains(field);

tests/language_2/override_const_field_test.dart

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)