| 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];
|
| - }
|
| -}
|
|
|