[dart2wasm] Make ClassInfo and ClassInfoCollector members private

Also makes some late field final.

Change-Id: I792fb10c151343c3a4a6d8b6a59cc6da8f69489b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279094
Reviewed-by: Joshua Litt <joshualitt@google.com>
Commit-Queue: Ömer Ağacan <omersa@google.com>
This commit is contained in:
Ömer Sinan Ağacan
2023-01-20 17:01:41 +00:00
committed by Commit Queue
parent 00a797b69e
commit ec6fcf34bb
2 changed files with 28 additions and 28 deletions
+27 -27
View File
@@ -14,7 +14,7 @@ import 'package:wasm_builder/wasm_builder.dart' as w;
/// code, e.g. in intrinsics.
///
/// The values are validated by asserts, typically either through
/// [ClassInfo.addField] (for manually added fields) or by a line in
/// [ClassInfo._addField] (for manually added fields) or by a line in
/// [FieldIndex.validate] (for fields declared in Dart code).
class FieldIndex {
static const classId = 0;
@@ -104,7 +104,7 @@ class ClassInfo {
/// The class whose struct is used as the type for variables of this type.
/// This is a type which is a superclass of all subtypes of this type.
late ClassInfo repr;
late final ClassInfo repr;
/// All classes which implement this class. This is used to compute `repr`.
final List<ClassInfo> implementedBy = [];
@@ -126,7 +126,7 @@ class ClassInfo {
implementedBy.add(this);
}
void addField(w.FieldType fieldType, [int? expectedIndex]) {
void _addField(w.FieldType fieldType, [int? expectedIndex]) {
assert(expectedIndex == null || expectedIndex == struct.fields.length);
struct.fields.add(fieldType);
}
@@ -174,14 +174,14 @@ class ClassInfoCollector {
TranslatorOptions get options => translator.options;
void initializeTop() {
void _initializeTop() {
final w.StructType struct = m.addStructType("#Top");
topInfo = ClassInfo(null, _nextClassId++, 0, struct, null);
translator.classes.add(topInfo);
translator.classForHeapType[struct] = topInfo;
}
void initialize(Class cls) {
void _initialize(Class cls) {
ClassInfo? info = translator.classInfo[cls];
if (info != null) return;
@@ -197,9 +197,9 @@ class ClassInfoCollector {
info.implementedBy.add(topInfo);
} else {
// Recursively initialize all supertypes before initializing this class.
initialize(superclass);
_initialize(superclass);
for (Supertype interface in cls.implementedTypes) {
initialize(interface.classNode);
_initialize(interface.classNode);
}
// In the Wasm type hierarchy, Object, bool and num sit directly below
@@ -271,19 +271,19 @@ class ClassInfoCollector {
info.repr = upperBound(info.implementedBy);
}
void generateFields(ClassInfo info) {
void _generateFields(ClassInfo info) {
ClassInfo? superInfo = info.superInfo;
if (superInfo == null) {
// Top - add class id field
info.addField(w.FieldType(w.NumType.i32), FieldIndex.classId);
info._addField(w.FieldType(w.NumType.i32), FieldIndex.classId);
} else if (info.struct != superInfo.struct) {
// Copy fields from superclass
for (w.FieldType fieldType in superInfo.struct.fields) {
info.addField(fieldType);
info._addField(fieldType);
}
if (info.cls!.superclass == null) {
// Object - add identity hash code field
info.addField(w.FieldType(w.NumType.i32), FieldIndex.identityHash);
info._addField(w.FieldType(w.NumType.i32), FieldIndex.identityHash);
}
// Add fields for type variables
for (TypeParameter parameter in info.cls!.typeParameters) {
@@ -294,7 +294,7 @@ class ClassInfoCollector {
translator.typeParameterIndex[match]!;
} else {
translator.typeParameterIndex[parameter] = info.struct.fields.length;
info.addField(typeType);
info._addField(typeType);
}
}
// Add fields for Dart instance fields
@@ -306,7 +306,7 @@ class ClassInfoCollector {
wasmType = wasmType.withNullability(true);
}
translator.fieldIndex[field] = info.struct.fields.length;
info.addField(w.FieldType(wasmType));
info._addField(w.FieldType(wasmType));
}
}
} else {
@@ -320,21 +320,21 @@ class ClassInfoCollector {
/// Create class info and Wasm struct for all classes.
void collect() {
initializeTop();
_initializeTop();
// Subclasses of the `_Closure` class are generated on the fly as fields
// with function types are encountered. Therefore, `_Closure` class must
// be early in the initialization order.
initialize(translator.closureClass);
_initialize(translator.closureClass);
// Similarly `_Type` is needed for type parameter fields in classes and
// needs to be initialized before we encounter a class with type
// parameters.
initialize(translator.typeClass);
_initialize(translator.typeClass);
for (Library library in translator.component.libraries) {
for (Class cls in library.classes) {
initialize(cls);
_initialize(cls);
}
}
@@ -349,7 +349,7 @@ class ClassInfoCollector {
// Now that the representation types for all classes have been computed,
// fill in the types of the fields in the generated Wasm structs.
for (ClassInfo info in translator.classes) {
generateFields(info);
_generateFields(info);
}
// Add hidden fields of typed_data classes.
@@ -362,16 +362,16 @@ class ClassInfoCollector {
void _addTypedDataFields() {
ClassInfo typedListBaseInfo =
translator.classInfo[translator.typedListBaseClass]!;
typedListBaseInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
typedListBaseInfo._addField(w.FieldType(w.NumType.i32, mutable: false),
FieldIndex.typedListBaseLength);
ClassInfo typedListInfo = translator.classInfo[translator.typedListClass]!;
typedListInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
typedListInfo._addField(w.FieldType(w.NumType.i32, mutable: false),
FieldIndex.typedListBaseLength);
w.RefType bytesArrayType = w.RefType.def(
translator.wasmArrayType(w.PackedType.i8, "i8"),
nullable: false);
typedListInfo.addField(
typedListInfo._addField(
w.FieldType(bytesArrayType, mutable: false), FieldIndex.typedListArray);
w.RefType typedListType =
@@ -379,20 +379,20 @@ class ClassInfoCollector {
ClassInfo typedListViewInfo =
translator.classInfo[translator.typedListViewClass]!;
typedListViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
typedListViewInfo._addField(w.FieldType(w.NumType.i32, mutable: false),
FieldIndex.typedListBaseLength);
typedListViewInfo.addField(w.FieldType(typedListType, mutable: false),
typedListViewInfo._addField(w.FieldType(typedListType, mutable: false),
FieldIndex.typedListViewTypedData);
typedListViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
typedListViewInfo._addField(w.FieldType(w.NumType.i32, mutable: false),
FieldIndex.typedListViewOffsetInBytes);
ClassInfo byteDataViewInfo =
translator.classInfo[translator.byteDataViewClass]!;
byteDataViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
byteDataViewInfo._addField(w.FieldType(w.NumType.i32, mutable: false),
FieldIndex.byteDataViewLength);
byteDataViewInfo.addField(w.FieldType(typedListType, mutable: false),
byteDataViewInfo._addField(w.FieldType(typedListType, mutable: false),
FieldIndex.byteDataViewTypedData);
byteDataViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
byteDataViewInfo._addField(w.FieldType(w.NumType.i32, mutable: false),
FieldIndex.byteDataViewOffsetInBytes);
}
}
+1 -1
View File
@@ -88,7 +88,7 @@ class Translator with KernelNodes {
final Set<Member> membersContainingInnerFunctions = {};
final Set<Member> membersBeingGenerated = {};
final List<_FunctionGenerator> _pendingFunctions = [];
late Procedure mainFunction;
late final Procedure mainFunction;
late final w.Module m;
late final w.DefinedFunction initFunction;
late final w.ValueType voidMarker;