Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Unified Diff: pkg/analyzer/lib/src/summary/format.dart

Issue 1589573003: Include the export namespace in the prelinked summary. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/summary/format.dart
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index d079941eea12192f5f2ea1dad48d9a4070db6fe3..319f33791f9d4f4c02ff6067837da31dbccd8311 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -17,7 +17,8 @@ import 'flat_buffers.dart' as fb;
enum PrelinkedReferenceKind {
classOrEnum,
typedef,
- other,
+ topLevelFunction,
+ topLevelPropertyAccessor,
prefix,
unresolved,
}
@@ -163,12 +164,189 @@ abstract class _PrelinkedDependencyMixin implements PrelinkedDependency {
};
}
+class PrelinkedExportNameBuilder extends Object with _PrelinkedExportNameMixin implements PrelinkedExportName {
+ bool _finished = false;
+
+ String _name;
+ int _dependency;
+ int _unit;
+ PrelinkedReferenceKind _kind;
+
+ PrelinkedExportNameBuilder();
+
+ @override
+ String get name => _name ?? '';
+
+ /**
+ * Name of the exported entity. TODO(paulberry): do we include the trailing
+ * '=' for a setter?
+ */
+ void set name(String _value) {
+ assert(!_finished);
+ _name = _value;
+ }
+
+ @override
+ int get dependency => _dependency ?? 0;
+
+ /**
+ * Index into [PrelinkedLibrary.dependencies] for the library in which the
+ * entity is defined.
+ */
+ void set dependency(int _value) {
+ assert(!_finished);
+ _dependency = _value;
+ }
+
+ @override
+ int get unit => _unit ?? 0;
+
+ /**
+ * Integer index indicating which unit in the imported library contains the
+ * definition of the entity. As with indices into [PrelinkedLibrary.units],
+ * zero represents the defining compilation unit, and nonzero values
+ * represent parts in the order of the corresponding `part` declarations.
+ */
+ void set unit(int _value) {
+ assert(!_finished);
+ _unit = _value;
+ }
+
+ @override
+ PrelinkedReferenceKind get kind => _kind ?? PrelinkedReferenceKind.classOrEnum;
+
+ /**
+ * The kind of the entity being referred to.
+ */
+ void set kind(PrelinkedReferenceKind _value) {
+ assert(!_finished);
+ _kind = _value;
+ }
+
+ fb.Offset finish(fb.Builder fbBuilder) {
+ assert(!_finished);
+ _finished = true;
+ fb.Offset offset_name;
+ if (_name != null) {
+ offset_name = fbBuilder.writeString(_name);
+ }
+ fbBuilder.startTable();
+ if (offset_name != null) {
+ fbBuilder.addOffset(0, offset_name);
+ }
+ if (_dependency != null && _dependency != 0) {
+ fbBuilder.addInt32(1, _dependency);
+ }
+ if (_unit != null && _unit != 0) {
+ fbBuilder.addInt32(2, _unit);
+ }
+ if (_kind != null && _kind != PrelinkedReferenceKind.classOrEnum) {
+ fbBuilder.addInt32(3, _kind.index);
+ }
+ return fbBuilder.endTable();
+ }
+}
+
+PrelinkedExportNameBuilder encodePrelinkedExportName({String name, int dependency, int unit, PrelinkedReferenceKind kind}) {
+ PrelinkedExportNameBuilder builder = new PrelinkedExportNameBuilder();
+ builder.name = name;
+ builder.dependency = dependency;
+ builder.unit = unit;
+ builder.kind = kind;
+ return builder;
+}
+
+/**
+ * Information about a single name in the export namespace of the library that
+ * is not in the public namespace.
+ */
+abstract class PrelinkedExportName extends base.SummaryClass {
+
+ /**
+ * Name of the exported entity. TODO(paulberry): do we include the trailing
+ * '=' for a setter?
+ */
+ String get name;
+
+ /**
+ * Index into [PrelinkedLibrary.dependencies] for the library in which the
+ * entity is defined.
+ */
+ int get dependency;
+
+ /**
+ * Integer index indicating which unit in the imported library contains the
+ * definition of the entity. As with indices into [PrelinkedLibrary.units],
+ * zero represents the defining compilation unit, and nonzero values
+ * represent parts in the order of the corresponding `part` declarations.
+ */
+ int get unit;
+
+ /**
+ * The kind of the entity being referred to.
+ */
+ PrelinkedReferenceKind get kind;
+}
+
+class _PrelinkedExportNameReader extends fb.TableReader<_PrelinkedExportNameImpl> {
+ const _PrelinkedExportNameReader();
+
+ @override
+ _PrelinkedExportNameImpl createObject(fb.BufferPointer bp) => new _PrelinkedExportNameImpl(bp);
+}
+
+class _PrelinkedExportNameImpl extends Object with _PrelinkedExportNameMixin implements PrelinkedExportName {
+ final fb.BufferPointer _bp;
+
+ _PrelinkedExportNameImpl(this._bp);
+
+ String _name;
+ int _dependency;
+ int _unit;
+ PrelinkedReferenceKind _kind;
+
+ @override
+ String get name {
+ _name ??= const fb.StringReader().vTableGet(_bp, 0, '');
+ return _name;
+ }
+
+ @override
+ int get dependency {
+ _dependency ??= const fb.Int32Reader().vTableGet(_bp, 1, 0);
+ return _dependency;
+ }
+
+ @override
+ int get unit {
+ _unit ??= const fb.Int32Reader().vTableGet(_bp, 2, 0);
+ return _unit;
+ }
+
+ @override
+ PrelinkedReferenceKind get kind {
+ _kind ??= PrelinkedReferenceKind.values[const fb.Int32Reader().vTableGet(_bp, 3, 0)];
+ return _kind;
+ }
+}
+
+abstract class _PrelinkedExportNameMixin implements PrelinkedExportName {
+ @override
+ Map<String, Object> toMap() => {
+ "name": name,
+ "dependency": dependency,
+ "unit": unit,
+ "kind": kind,
+ };
+}
+
class PrelinkedLibraryBuilder extends Object with _PrelinkedLibraryMixin implements PrelinkedLibrary {
bool _finished = false;
List<PrelinkedUnitBuilder> _units;
List<PrelinkedDependencyBuilder> _dependencies;
List<int> _importDependencies;
+ List<PrelinkedExportNameBuilder> _exportNames;
PrelinkedLibraryBuilder();
@@ -218,6 +396,21 @@ class PrelinkedLibraryBuilder extends Object with _PrelinkedLibraryMixin impleme
_importDependencies = _value;
}
+ @override
+ List<PrelinkedExportName> get exportNames => _exportNames ?? const <PrelinkedExportName>[];
+
+ /**
+ * Information about entities in the export namespace of the library that are
+ * not in the public namespace of the library (that is, entities that are
+ * brought into the namespace via `export` directives).
+ *
+ * Sorted by name.
+ */
+ void set exportNames(List<PrelinkedExportNameBuilder> _value) {
+ assert(!_finished);
+ _exportNames = _value;
+ }
+
List<int> toBuffer() {
fb.Builder fbBuilder = new fb.Builder();
return fbBuilder.finish(finish(fbBuilder));
@@ -229,6 +422,7 @@ class PrelinkedLibraryBuilder extends Object with _PrelinkedLibraryMixin impleme
fb.Offset offset_units;
fb.Offset offset_dependencies;
fb.Offset offset_importDependencies;
+ fb.Offset offset_exportNames;
if (!(_units == null || _units.isEmpty)) {
offset_units = fbBuilder.writeList(_units.map((b) => b.finish(fbBuilder)).toList());
}
@@ -238,6 +432,9 @@ class PrelinkedLibraryBuilder extends Object with _PrelinkedLibraryMixin impleme
if (!(_importDependencies == null || _importDependencies.isEmpty)) {
offset_importDependencies = fbBuilder.writeListInt32(_importDependencies);
}
+ if (!(_exportNames == null || _exportNames.isEmpty)) {
+ offset_exportNames = fbBuilder.writeList(_exportNames.map((b) => b.finish(fbBuilder)).toList());
+ }
fbBuilder.startTable();
if (offset_units != null) {
fbBuilder.addOffset(0, offset_units);
@@ -248,15 +445,19 @@ class PrelinkedLibraryBuilder extends Object with _PrelinkedLibraryMixin impleme
if (offset_importDependencies != null) {
fbBuilder.addOffset(2, offset_importDependencies);
}
+ if (offset_exportNames != null) {
+ fbBuilder.addOffset(3, offset_exportNames);
+ }
return fbBuilder.endTable();
}
}
-PrelinkedLibraryBuilder encodePrelinkedLibrary({List<PrelinkedUnitBuilder> units, List<PrelinkedDependencyBuilder> dependencies, List<int> importDependencies}) {
+PrelinkedLibraryBuilder encodePrelinkedLibrary({List<PrelinkedUnitBuilder> units, List<PrelinkedDependencyBuilder> dependencies, List<int> importDependencies, List<PrelinkedExportNameBuilder> exportNames}) {
PrelinkedLibraryBuilder builder = new PrelinkedLibraryBuilder();
builder.units = units;
builder.dependencies = dependencies;
builder.importDependencies = importDependencies;
+ builder.exportNames = exportNames;
return builder;
}
@@ -296,6 +497,15 @@ abstract class PrelinkedLibrary extends base.SummaryClass {
* well, since there will effectively be a one-to-one mapping.
*/
List<int> get importDependencies;
+
+ /**
+ * Information about entities in the export namespace of the library that are
+ * not in the public namespace of the library (that is, entities that are
+ * brought into the namespace via `export` directives).
+ *
+ * Sorted by name.
+ */
+ List<PrelinkedExportName> get exportNames;
}
class _PrelinkedLibraryReader extends fb.TableReader<_PrelinkedLibraryImpl> {
@@ -313,6 +523,7 @@ class _PrelinkedLibraryImpl extends Object with _PrelinkedLibraryMixin implement
List<PrelinkedUnit> _units;
List<PrelinkedDependency> _dependencies;
List<int> _importDependencies;
+ List<PrelinkedExportName> _exportNames;
@override
List<PrelinkedUnit> get units {
@@ -331,6 +542,12 @@ class _PrelinkedLibraryImpl extends Object with _PrelinkedLibraryMixin implement
_importDependencies ??= const fb.ListReader<int>(const fb.Int32Reader()).vTableGet(_bp, 2, const <int>[]);
return _importDependencies;
}
+
+ @override
+ List<PrelinkedExportName> get exportNames {
+ _exportNames ??= const fb.ListReader<PrelinkedExportName>(const _PrelinkedExportNameReader()).vTableGet(_bp, 3, const <PrelinkedExportName>[]);
+ return _exportNames;
+ }
}
abstract class _PrelinkedLibraryMixin implements PrelinkedLibrary {
@@ -339,6 +556,7 @@ abstract class _PrelinkedLibraryMixin implements PrelinkedLibrary {
"units": units,
"dependencies": dependencies,
"importDependencies": importDependencies,
+ "exportNames": exportNames,
};
}
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/prelink.dart » ('j') | pkg/analyzer/lib/src/summary/resynthesize.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698