| Index: pkg/analyzer/lib/src/summary/fasta/expression_serializer.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/fasta/expression_serializer.dart b/pkg/analyzer/lib/src/summary/fasta/expression_serializer.dart
|
| deleted file mode 100644
|
| index 237d8e7bce891a986d52a8dcd981ebeea1d7bfce..0000000000000000000000000000000000000000
|
| --- a/pkg/analyzer/lib/src/summary/fasta/expression_serializer.dart
|
| +++ /dev/null
|
| @@ -1,262 +0,0 @@
|
| -// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -/// Algorithm to serialize expressions into the format used by summaries.
|
| -library summary.src.expression_serializer;
|
| -
|
| -import 'package:front_end/src/fasta/scanner/token_constants.dart';
|
| -
|
| -import 'model.dart';
|
| -
|
| -/// Translate a parser binary operation into an operation in the summary format.
|
| -UnlinkedExprOperation _binaryOpFor(int operatorKind) {
|
| - switch (operatorKind) {
|
| - case AMPERSAND_TOKEN:
|
| - return UnlinkedExprOperation.bitAnd;
|
| - case AMPERSAND_AMPERSAND_TOKEN:
|
| - return UnlinkedExprOperation.and;
|
| - case BANG_EQ_TOKEN:
|
| - return UnlinkedExprOperation.notEqual;
|
| - case BAR_TOKEN:
|
| - return UnlinkedExprOperation.bitOr;
|
| - case BAR_BAR_TOKEN:
|
| - return UnlinkedExprOperation.or;
|
| - case CARET_TOKEN:
|
| - return UnlinkedExprOperation.bitXor;
|
| - case EQ_EQ_TOKEN:
|
| - return UnlinkedExprOperation.equal;
|
| - case GT_TOKEN:
|
| - return UnlinkedExprOperation.greater;
|
| - case GT_EQ_TOKEN:
|
| - return UnlinkedExprOperation.greaterEqual;
|
| - case GT_GT_TOKEN:
|
| - return UnlinkedExprOperation.bitShiftRight;
|
| - case LT_TOKEN:
|
| - return UnlinkedExprOperation.less;
|
| - case LT_EQ_TOKEN:
|
| - return UnlinkedExprOperation.lessEqual;
|
| - case LT_LT_TOKEN:
|
| - return UnlinkedExprOperation.bitShiftLeft;
|
| - case MINUS_TOKEN:
|
| - return UnlinkedExprOperation.subtract;
|
| - case PERCENT_TOKEN:
|
| - return UnlinkedExprOperation.modulo;
|
| - case PERIOD_TOKEN:
|
| - return UnlinkedExprOperation.extractProperty;
|
| - case PLUS_TOKEN:
|
| - return UnlinkedExprOperation.add;
|
| - case QUESTION_QUESTION_TOKEN:
|
| - return UnlinkedExprOperation.ifNull;
|
| - case SLASH_TOKEN:
|
| - return UnlinkedExprOperation.divide;
|
| - case STAR_TOKEN:
|
| - return UnlinkedExprOperation.multiply;
|
| - case TILDE_SLASH_TOKEN:
|
| - return UnlinkedExprOperation.floorDivide;
|
| - default:
|
| - throw "Unhandled openratorKind $operatorKind";
|
| - }
|
| -}
|
| -
|
| -/// Translate a parser unary operation into an operation in the summary format.
|
| -UnlinkedExprOperation _unaryOpFor(int operatorKind) {
|
| - switch (operatorKind) {
|
| - case BANG_TOKEN:
|
| - return UnlinkedExprOperation.not;
|
| - case MINUS_TOKEN:
|
| - return UnlinkedExprOperation.negate;
|
| - default:
|
| - throw "Unhandled operator kind $operatorKind";
|
| - }
|
| -}
|
| -
|
| -/// Visitor over the minimal expression AST to convert them into stack-like
|
| -/// expressions used in the summary format.
|
| -class Serializer extends RecursiveVisitor {
|
| - UnlinkedExprBuilder expression;
|
| - final Scope scope;
|
| - final bool forConst;
|
| -
|
| - Serializer(this.scope, this.forConst);
|
| -
|
| - handleAs(As n) {
|
| - throw new UnimplementedError(); // TODO(paulberry): fix the code below.
|
| - // handleType(a.type);
|
| - // expression.operations.add(UnlinkedExprOperation.typeCast);
|
| - }
|
| -
|
| - handleBinary(Binary n) {
|
| - expression.operations.add(_binaryOpFor(n.operator));
|
| - }
|
| -
|
| - handleBool(BoolLiteral n) {
|
| - expression.operations.add(n.value
|
| - ? UnlinkedExprOperation.pushTrue
|
| - : UnlinkedExprOperation.pushFalse);
|
| - }
|
| -
|
| - handleConditional(Conditional n) {
|
| - expression.operations.add(UnlinkedExprOperation.conditional);
|
| - }
|
| -
|
| - handleConstCreation(ConstCreation n) {
|
| - var ctor = n.constructor;
|
| - var type = handleType(ctor.type);
|
| - if (ctor.name != null) {
|
| - throw new UnimplementedError(); // TODO(paulberry): fix the code below.
|
| - //var classRef = handleRef(ctor.type.name, push: false);
|
| - //var top = scope.top;
|
| - //var ref = new LazyEntityRef(ctor.name, top)
|
| - // ..reference = (scope.serializeReference(classRef.reference, ctor.name))
|
| - // ..typeArguments = type.typeArguments
|
| - // ..wasExpanded = true;
|
| - //expression.references.add(ref);
|
| - } else {
|
| - expression.references.add(type);
|
| - }
|
| - expression.ints.add(n.namedArgs.length);
|
| - expression.ints.add(n.positionalArgs.length);
|
| - expression.strings.addAll(n.namedArgs.map((a) => a.name));
|
| - expression.operations.add(UnlinkedExprOperation.invokeConstructor);
|
| - }
|
| -
|
| - handleDouble(DoubleLiteral n) {
|
| - expression.operations.add(UnlinkedExprOperation.pushDouble);
|
| - expression.doubles.add(n.value);
|
| - }
|
| -
|
| - handleIdentical(Identical n) {
|
| - expression.references.add(handleRef(new Ref('identical'), push: false));
|
| - expression.ints.add(0);
|
| - expression.ints.add(2);
|
| - expression.ints.add(0);
|
| - expression.operations.add(UnlinkedExprOperation.invokeMethodRef);
|
| - }
|
| -
|
| - handleInt(IntLiteral n) {
|
| - var ints = expression.ints;
|
| - var operations = expression.operations;
|
| - int value = n.value;
|
| - assert(value >= 0);
|
| - if (value >= (1 << 32)) {
|
| - int numOfComponents = 0;
|
| - expression.ints.add(numOfComponents);
|
| - void pushComponents(int value) {
|
| - if (value >= (1 << 32)) {
|
| - pushComponents(value >> 32);
|
| - }
|
| - numOfComponents++;
|
| - ints.add(value & 0xFFFFFFFF);
|
| - }
|
| -
|
| - pushComponents(value);
|
| - ints[ints.length - 1 - numOfComponents] = numOfComponents;
|
| - operations.add(UnlinkedExprOperation.pushLongInt);
|
| - } else {
|
| - operations.add(UnlinkedExprOperation.pushInt);
|
| - ints.add(value);
|
| - }
|
| - }
|
| -
|
| - handleInvalid(Invalid n) {
|
| - expression.isValidConst = false;
|
| - throw new UnimplementedError(); // TODO(paulberry): fix the code below.
|
| - // expression.operations.add(UnlinkedExprOperation.pushInvalidor);
|
| - }
|
| -
|
| - handleIs(Is n) {
|
| - throw new UnimplementedError(); // TODO(paulberry): fix the code below.
|
| - // handleType(i.type);
|
| - // expression.operations.add(UnlinkedExprOperation.typeCheck);
|
| - }
|
| -
|
| - handleList(ListLiteral n) {
|
| - expression.ints.add(n.values.length);
|
| - if (n.elementType == null) {
|
| - expression.operations.add(UnlinkedExprOperation.makeUntypedList);
|
| - } else {
|
| - handleType(n.elementType);
|
| - expression.operations.add(UnlinkedExprOperation.makeTypedList);
|
| - }
|
| - }
|
| -
|
| - handleLoad(Load n) {
|
| - expression.strings.add(n.name);
|
| - expression.operations.add(UnlinkedExprOperation.extractProperty);
|
| - }
|
| -
|
| - handleMap(MapLiteral n) {
|
| - expression.ints.add(n.values.length);
|
| - if (n.types.isEmpty) {
|
| - expression.operations.add(UnlinkedExprOperation.makeUntypedMap);
|
| - } else {
|
| - n.types.forEach(handleType);
|
| - expression.operations.add(UnlinkedExprOperation.makeTypedMap);
|
| - }
|
| - }
|
| -
|
| - handleNull(NullLiteral n) {
|
| - expression.operations.add(UnlinkedExprOperation.pushNull);
|
| - }
|
| -
|
| - handleOpaque(Opaque n) {
|
| - if (n.type != null) {
|
| - handleType(n.type);
|
| - expression.operations.add(UnlinkedExprOperation.pushTypedAbstract);
|
| - } else {
|
| - expression.operations.add(UnlinkedExprOperation.pushUntypedAbstract);
|
| - }
|
| - }
|
| -
|
| - handleOpaqueOp(OpaqueOp n) {
|
| - // nothing to do, recursive visitor serialized subexpression.
|
| - }
|
| -
|
| - handleRef(Ref n, {push: true}) {
|
| - var ref = n.prefix == null
|
| - ? new LazyEntityRef(n.name, scope)
|
| - : new NestedLazyEntityRef(
|
| - handleRef(n.prefix, push: false), n.name, scope);
|
| - if (push) {
|
| - expression.references.add(ref);
|
| - expression.operations.add(UnlinkedExprOperation.pushReference);
|
| - }
|
| - return ref;
|
| - }
|
| -
|
| - handleString(StringLiteral n) {
|
| - expression.strings.add(n.value);
|
| - expression.operations.add(UnlinkedExprOperation.pushString);
|
| - }
|
| -
|
| - handleSymbol(SymbolLiteral n) {
|
| - expression.strings.add(n.value);
|
| - expression.operations.add(UnlinkedExprOperation.makeSymbol);
|
| - }
|
| -
|
| - handleType(TypeRef n) {
|
| - var t = handleRef(n.name, push: false);
|
| - var args = n.typeArguments ?? [];
|
| - t.typeArguments = args.map((a) => handleType(a)).toList();
|
| - return t;
|
| - }
|
| -
|
| - handleUnary(Unary n) {
|
| - expression.operations.add(_unaryOpFor(n.operator));
|
| - }
|
| -
|
| - run(Expression root) {
|
| - expression = new UnlinkedExprBuilder(
|
| - isValidConst: forConst,
|
| - operations: [],
|
| - assignmentOperators: [],
|
| - ints: [],
|
| - doubles: [],
|
| - strings: [],
|
| - references: []);
|
| - root.accept(this);
|
| - expression.references.forEach((r) => (r as LazyEntityRef).expand());
|
| - return expression;
|
| - }
|
| -}
|
|
|