// Copyright (c) 2019, 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.

import 'dart:collection';

/*element: dynamicIndex:Specializer=[!Index]*/
@pragma('dart2js:noInline')
dynamicIndex(var list) {
  return list[0]; // This not known to be an indexable primitive.
}

/*element: unknownListIndex:Specializer=[!Index]*/
@pragma('dart2js:noInline')
unknownListIndex(List list) {
  return list[0]; // This not known to be an indexable primitive.
}

/*element: possiblyNullMutableListIndex:Specializer=[Index]*/
@pragma('dart2js:noInline')
possiblyNullMutableListIndex(bool b) {
  var list = b ? [0] : null;
  return list[0];
}

/*element: mutableListIndex:Specializer=[Index]*/
@pragma('dart2js:noInline')
mutableListIndex() {
  var list = [0];
  return list[0];
}

/*element: mutableListDynamicIndex:Specializer=[Index]*/
@pragma('dart2js:noInline')
mutableListDynamicIndex(dynamic index) {
  var list = [0];
  return list[index]; // CFE inserts an implicit cast of the index.
}

/*strong.element: mutableDynamicListDynamicIndex:Specializer=[!Index]*/
/*omit.element: mutableDynamicListDynamicIndex:Specializer=[Index]*/
@pragma('dart2js:noInline')
mutableDynamicListDynamicIndex(dynamic index) {
  dynamic list = [0];
  return list[index];
}

main() {
  dynamicIndex([]);
  dynamicIndex({});
  unknownListIndex([]);
  unknownListIndex(new MyList());
  possiblyNullMutableListIndex(true);
  possiblyNullMutableListIndex(false);
  mutableListIndex();
  mutableListDynamicIndex(0);
  mutableListDynamicIndex('');
  mutableDynamicListDynamicIndex(0);
  mutableDynamicListDynamicIndex('');
}

class MyList<E> extends ListBase<E> {
  E operator [](int index) => null;
  void operator []=(int index, E value) {}
  int get length => 0;
  void set length(int value) {}
}
