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

@pragma('dart2js:noInline')
/*member: foo1:function() {
  return 72;
}*/
foo1() {
  var a = 'Hello';
  var b = 0;
  return a.codeUnitAt(b);
  // Constant folds to 'return 72;'
}

@pragma('dart2js:noInline')
/*spec|canary.member: foo2:function() {
  return B.JSString_methods.codeUnitAt$1("Hello", A._asInt(1.5));
}*/
/*prod.member: foo2:function() {
  return B.JSString_methods.codeUnitAt$1("Hello", 1.5);
}*/
foo2() {
  var a = 'Hello';
  dynamic b = 1.5;
  return a.codeUnitAt(b);
  // No folding of index type error.
}

@pragma('dart2js:noInline')
/*member: foo3:function() {
  return B.JSString_methods._codeUnitAt$1("Hello", 55);
}*/
foo3() {
  var a = 'Hello';
  dynamic b = 55;
  return a.codeUnitAt(b);
  // No folding of index range error.
}

/*member: main:ignore*/
main() {
  foo1();
  foo2();
  foo3();
}
