anchor.diff:      bool isSynthetic = readByte() == 1;
       switch (tag) {
         case Tag.InvalidInitializer:
  -        return new InvalidInitializer();
  +        return _readInvalidInitializer();
         case Tag.FieldInitializer:
  -        Reference reference = readMemberReference();
  -        Expression value = readExpression();
  -        return new FieldInitializer.byReference(reference, value)
  -          ..isSynthetic = isSynthetic;
  +        return _readFieldInitializer(isSynthetic);
         case Tag.SuperInitializer:
  -        int offset = readOffset();
  -        Reference reference = readMemberReference();
  -        Arguments arguments = readArguments();
  -        return new SuperInitializer.byReference(reference, arguments)
  -          ..isSynthetic = isSynthetic
  -          ..fileOffset = offset;
  +        return _readSuperInitializer(isSynthetic);
         case Tag.RedirectingInitializer:
  -        int offset = readOffset();
  -        return new RedirectingInitializer.byReference(
  -            readMemberReference(), readArguments())
  -          ..fileOffset = offset;
  +        return _readRedirectingInitializer();
         case Tag.LocalInitializer:
  -        return new LocalInitializer(readAndPushVariableDeclaration());
  +        return _readLocalInitializer();
         case Tag.AssertInitializer:
  -        return new AssertInitializer(readStatement());
  +        return _readAssertInitializer();
         default:
           throw fail('unexpected initializer tag: $tag');
       }
  +  }
  +
  +  Initializer _readInvalidInitializer() {
  +    return new InvalidInitializer();
  +  }
  +
  +  Initializer _readFieldInitializer(bool isSynthetic) {
  +    Reference reference = readMemberReference();
  +    Expression value = readExpression();
  +    return new FieldInitializer.byReference(reference, value)
  +      ..isSynthetic = isSynthetic;
  +  }
  +
  +  Initializer _readSuperInitializer(bool isSynthetic) {
  +    int offset = readOffset();
  +    Reference reference = readMemberReference();
  +    Arguments arguments = readArguments();
  +    return new SuperInitializer.byReference(reference, arguments)
  +      ..isSynthetic = isSynthetic
  +      ..fileOffset = offset;
  +  }
  +
  +  Initializer _readRedirectingInitializer() {
  +    int offset = readOffset();
  +    return new RedirectingInitializer.byReference(
  +        readMemberReference(), readArguments())
  +      ..fileOffset = offset;
  +  }
  +
  +  Initializer _readLocalInitializer() {
  +    return new LocalInitializer(readAndPushVariableDeclaration());
  +  }
  +
  +  Initializer _readAssertInitializer() {
  +    return new AssertInitializer(readStatement());
     }
   
     FunctionNode readFunctionNodeOption(bool lazyLoadBody, int outerEndOffset) {
  
positive.code:     final int constantTag = readByte();
      switch (constantTag) {
        case ConstantTag.NullConstant:
          return new NullConstant();
        case ConstantTag.BoolConstant:
          return new BoolConstant(readByte() == 1);
        case ConstantTag.IntConstant:
          return new IntConstant((readExpression() as IntLiteral).value);
        case ConstantTag.DoubleConstant:
          return new DoubleConstant(readDouble());
        case ConstantTag.StringConstant:
          return new StringConstant(readStringReference());
        case ConstantTag.SymbolConstant:
          Reference libraryReference = readLibraryReference(allowNull: true);
          return new SymbolConstant(readStringReference(), libraryReference);
        case ConstantTag.MapConstant:
          final DartType keyType = readDartType();
          final DartType valueType = readDartType();
          final int length = readUInt30();
          final List<ConstantMapEntry> entries =
              new List<ConstantMapEntry>.filled(length, null, growable: true);
          for (int i = 0; i < length; i++) {
            final Constant key = readConstantReference();
            final Constant value = readConstantReference();
            entries[i] = new ConstantMapEntry(key, value);
          }
          return new MapConstant(keyType, valueType, entries);
        case ConstantTag.ListConstant:
          final DartType typeArgument = readDartType();
          final int length = readUInt30();
          final List<Constant> entries =
              new List<Constant>.filled(length, null, growable: true);
          for (int i = 0; i < length; i++) {
            entries[i] = readConstantReference();
          }
          return new ListConstant(typeArgument, entries);
        case ConstantTag.SetConstant:
          final DartType typeArgument = readDartType();
          final int length = readUInt30();
          final List<Constant> entries =
              new List<Constant>.filled(length, null, growable: true);
          for (int i = 0; i < length; i++) {
            entries[i] = readConstantReference();
          }
          return new SetConstant(typeArgument, entries);
        case ConstantTag.InstanceConstant:
          final Reference classReference = readClassReference();
          final int typeArgumentCount = readUInt30();
          final List<DartType> typeArguments =
              new List<DartType>.filled(typeArgumentCount, null, growable: true);
          for (int i = 0; i < typeArgumentCount; i++) {
            typeArguments[i] = readDartType();
          }
          final int fieldValueCount = readUInt30();
          final Map<Reference, Constant> fieldValues = <Reference, Constant>{};
          for (int i = 0; i < fieldValueCount; i++) {
            final Reference fieldRef =
                readCanonicalNameReference().getReference();
            final Constant constant = readConstantReference();
            fieldValues[fieldRef] = constant;
          }
          return new InstanceConstant(classReference, typeArguments, fieldValues);
        case ConstantTag.PartialInstantiationConstant:
          final TearOffConstant tearOffConstant =
              readConstantReference() as TearOffConstant;
          final int length = readUInt30();
          final List<DartType> types = new List<DartType>.filled(length, null);
          for (int i = 0; i < length; i++) {
            types[i] = readDartType();
          }
          return new PartialInstantiationConstant(tearOffConstant, types);
        case ConstantTag.TearOffConstant:
          final Reference reference = readCanonicalNameReference().getReference();
          return new TearOffConstant.byReference(reference);
        case ConstantTag.TypeLiteralConstant:
          final DartType type = readDartType();
          return new TypeLiteralConstant(type);
        case ConstantTag.UnevaluatedConstant:
          final Expression expression = readExpression();
          return new UnevaluatedConstant(expression);
      }
  
      throw fail('unexpected constant tag: $constantTag');
    }
  
    Constant readConstantReference() {
  
negative.code:       ..fileEndOffset = endOffset;
    }
  
    AssertBlock _readAssertBlock() {
      int stackHeight = variableStack.length;
      List<Statement> body = readStatementList();
      variableStack.length = stackHeight;
  