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

Unified Diff: pkg/front_end/lib/src/libraries_reader.dart

Issue 2941083002: Remove pkg/front_end's remaining dependencies on pkg/analyzer. (Closed)
Patch Set: Remove analyzer dep from pubspec Created 3 years, 6 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
« no previous file with comments | « pkg/front_end/lib/resolved_ast_generator.dart ('k') | pkg/front_end/pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/libraries_reader.dart
diff --git a/pkg/front_end/lib/src/libraries_reader.dart b/pkg/front_end/lib/src/libraries_reader.dart
deleted file mode 100644
index ded5d9feee7795a893229d44c6ff5c468a331153..0000000000000000000000000000000000000000
--- a/pkg/front_end/lib/src/libraries_reader.dart
+++ /dev/null
@@ -1,201 +0,0 @@
-import 'package:analyzer/src/summary/idl.dart';
-import 'package:front_end/src/base/library_info.dart';
-
-/// Decodes the contents of the SDK's "libraries.dart" file.
-///
-/// Caller should pass in the unlinked summary of the libraries.dart file. This
-/// function will materialize the "libraries" constant based on information in
-/// the summary.
-///
-/// Note that this code is not intended to be fully general; it makes some
-/// assumptions about the structure of the "libraries.dart" file (such as what
-/// declarations are expected to be present in it, and the types of those
-/// declarations).
-Map<String, LibraryInfo> readLibraries(UnlinkedUnit librariesUnit) {
- var constContext = new _ConstContext(librariesUnit.references);
- for (var variable in librariesUnit.variables) {
- if (!variable.isConst) continue;
- constContext.topLevelConstants[variable.name] =
- new _ConstVariable(variable.initializer.bodyExpr, constContext);
- }
- for (var cls in librariesUnit.classes) {
- if (cls.name == 'Maturity') {
- for (var field in cls.fields) {
- if (!field.isConst) continue;
- constContext.maturityConstants[field.name] =
- new _ConstVariable(field.initializer.bodyExpr, constContext);
- }
- }
- }
- return constContext.topLevelConstants['libraries'].value;
-}
-
-/// Function type used to invoke a constructor based on dynamic information.
-///
-/// Caller supplies two callbacks ([positional] and [named]) which can be used
-/// to query the arguments passed to the constructor. These callbacks will
-/// return the requested argument if it was provided; otherwise they will return
-/// the supplied default value.
-typedef dynamic _Constructor(dynamic positional(int i, [dynamic defaultValue]),
- dynamic named(String name, [dynamic defaultValue]));
-
-/// Contextual information used to evaluate constants in the "libraries.dart"
-/// file.
-class _ConstContext {
- /// Top level constants in the "libraries.dart" file.
- final topLevelConstants = <String, _ConstVariable>{};
-
- /// Static constants in "libraries.dart"'s "Maturity" class.
- final maturityConstants = <String, _ConstVariable>{};
-
- /// References from the unlinked summary of the "libraries.dart" file.
- final List<UnlinkedReference> references;
-
- _ConstContext(this.references);
-}
-
-/// Information necessary to evaluate a single constant from the
-/// "libraries.dart" file.
-class _ConstVariable {
- /// The constant expression from the unlinked summary.
- final UnlinkedExpr expr;
-
- /// Contextual information necessary to evaluate the constant.
- final _ConstContext context;
-
- /// The evaluated value, or `null` if it hasn't been evaluated yet.
- dynamic _value;
-
- _ConstVariable(this.expr, this.context);
-
- /// Evaluate the constant (if necessary) and return it.
- dynamic get value => _value ??= _materialize();
-
- /// Find the constructor referred to by [entityRef] and return a function
- /// which may be used to invoke it.
- _Constructor _findConstructor(EntityRef entityRef) {
- // This method is not fully general; we only support the constructor
- // invocations that we expect to find in LibraryInfo.
- assert(entityRef.implicitFunctionTypeIndices.isEmpty);
- assert(entityRef.paramReference == 0);
- assert(entityRef.syntheticParams.isEmpty);
- assert(entityRef.syntheticReturnType == null);
- assert(entityRef.typeArguments.isEmpty);
- var reference = context.references[entityRef.reference];
- assert(reference.prefixReference == 0);
- switch (reference.name) {
- case 'LibraryInfo':
- return (dynamic positional(int i, [dynamic defaultValue]),
- dynamic named(String name, [dynamic defaultValue])) =>
- new LibraryInfo(positional(0),
- categories: named('categories', ''),
- dart2jsPath: named('dart2jsPath'),
- dart2jsPatchPath: named('dart2jsPatchPath'),
- implementation: named('implementation', false),
- documented: named('documented', true),
- maturity: named('maturity', Maturity.UNSPECIFIED),
- platforms: named('platforms', DART2JS_PLATFORM | VM_PLATFORM));
- case 'Maturity':
- return (dynamic positional(int i, [dynamic defaultValue]),
- dynamic named(String name, [dynamic defaultValue])) =>
- new Maturity(positional(0), positional(1), positional(2));
- default:
- throw new UnimplementedError(
- 'Unexpected constructor reference: ${reference.name}');
- }
- }
-
- /// Compute the value referred to by [entityRef].
- dynamic _findReference(EntityRef entityRef) {
- // This method is not fully general; we only support the references that we
- // expect to find in LibraryInfo.
- assert(entityRef.implicitFunctionTypeIndices.isEmpty);
- assert(entityRef.paramReference == 0);
- assert(entityRef.syntheticParams.isEmpty);
- assert(entityRef.syntheticReturnType == null);
- assert(entityRef.typeArguments.isEmpty);
- var reference = context.references[entityRef.reference];
- if (reference.prefixReference == 0) {
- return context.topLevelConstants[reference.name].value;
- } else {
- assert(reference.prefixReference != 0);
- var prefixReference = context.references[reference.prefixReference];
- assert(prefixReference.name == 'Maturity');
- assert(prefixReference.prefixReference == 0);
- return context.maturityConstants[reference.name].value;
- }
- }
-
- /// Compute the value of the constant.
- dynamic _materialize() {
- var stack = [];
- var stringIndex = 0;
- var intIndex = 0;
- var referenceIndex = 0;
- List popItems(int count) {
- var items = stack.sublist(stack.length - count, stack.length);
- stack.length -= count;
- return items;
- }
-
- for (var operation in expr.operations) {
- switch (operation) {
- case UnlinkedExprOperation.pushString:
- stack.add(expr.strings[stringIndex++]);
- break;
- case UnlinkedExprOperation.invokeConstructor:
- var namedArgumentList = popItems(expr.ints[intIndex++]);
- var namedArguments = <String, dynamic>{};
- for (var namedArgument in namedArgumentList) {
- namedArguments[expr.strings[stringIndex++]] = namedArgument;
- }
- var positionalArguments = popItems(expr.ints[intIndex++]);
- stack.add(_findConstructor(expr.references[referenceIndex++])(
- (i, [defaultValue]) => i < positionalArguments.length
- ? positionalArguments[i]
- : defaultValue,
- (name, [defaultValue]) => namedArguments.containsKey(name)
- ? namedArguments[name]
- : defaultValue));
- break;
- case UnlinkedExprOperation.makeUntypedMap:
- var map = {};
- var numKeyValuePairs = expr.ints[intIndex++];
- var keyValueList = popItems(numKeyValuePairs * 2);
- for (var i = 0; i < numKeyValuePairs; i++) {
- map[keyValueList[2 * i]] = keyValueList[2 * i + 1];
- }
- stack.add(map);
- break;
- case UnlinkedExprOperation.pushReference:
- stack.add(_findReference(expr.references[referenceIndex++]));
- break;
- case UnlinkedExprOperation.pushInt:
- stack.add(expr.ints[intIndex++]);
- break;
- case UnlinkedExprOperation.pushFalse:
- stack.add(false);
- break;
- case UnlinkedExprOperation.pushTrue:
- stack.add(true);
- break;
- case UnlinkedExprOperation.bitOr:
- var y = stack.removeLast();
- var x = stack.removeLast();
- stack.add(x | y);
- break;
- default:
- throw new UnimplementedError(
- 'Unexpected expression in libraries.dart: $operation');
- }
- }
- assert(stringIndex == expr.strings.length);
- assert(intIndex == expr.ints.length);
- assert(referenceIndex == expr.references.length);
- assert(stack.length == 1);
- if (stack[0] == null) {
- throw new StateError('Unexpected null constant in libraries.dart');
- }
- return stack[0];
- }
-}
« no previous file with comments | « pkg/front_end/lib/resolved_ast_generator.dart ('k') | pkg/front_end/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698