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

// Check that indexed access to lists throws correct exception if index
// is not int.

main() {
  checkList(new List.fixedLength(10));
  var growable = new List();
  growable.add(1);
  growable.add(1);
  checkList(growable);
}


checkList(var list) {
  // Check unoptimized.
  Expect.isFalse(checkCatch(getIt, list, 1));
  Expect.isTrue(checkCatch(getIt, list, "hi"));
  Expect.isFalse(checkCatch(putIt, list, 1));
  Expect.isTrue(checkCatch(putIt, list, "hi"));
  // Optimize 'getIt' and 'putIt'.
  for (int i = 0; i < 2000; i++) {
     putIt(list, 1);
     getIt(list, 1);
  }
  Expect.isTrue(checkCatch(getIt, list, "hi"));
  Expect.isTrue(checkCatch(putIt, list, "hi"));
}

checkCatch(var f, var list, var index) {
  try {
    f(list, index);
  } on ArgumentError catch (e) {
    return true;
  } on TypeError catch (t) {
    return true;  // thrown in type checked mode.
  }
  return false;
}


getIt(var a, var i) {
  return a[i];
}


putIt(var a, var i) {
  a[i] = null;
}
