// 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:never-inline') /*member: foo1:function() { return 72; }*/ foo1() { var a = 'Hello'; var b = 0; return a.codeUnitAt(b); // Constant folds to 'return 72;' } @pragma('dart2js:never-inline') /*spec|canary.member: foo2:function() { return B.JSString_methods.codeUnitAt$1("Hello", A._asInt("x")); }*/ /*prod.member: foo2:function() { return B.JSString_methods.codeUnitAt$1("Hello", "x"); }*/ foo2() { var a = 'Hello'; dynamic b = 'x'; return a.codeUnitAt(b); // No folding of index type error. } @pragma('dart2js:never-inline') /*member: foo3:function() { return A.ioore("Hello", 55); return "Hello".charCodeAt(55); }*/ foo3() { var a = 'Hello'; dynamic b = 55; return a.codeUnitAt(b); // Index always out of range. // The code after the always-fail check is unfortunate. } @pragma('dart2js:never-inline') /*member: foo4:function(i) { if (!(i >= 0 && i < 5)) return A.ioore("Hello", i); return "Hello".charCodeAt(i); }*/ foo4(int i) { return 'Hello'.codeUnitAt(i); // Normal bounds check. } @pragma('dart2js:never-inline') /*member: foo5:function(i) { if (!(i < 5)) return A.ioore("Hello", i); return "Hello".charCodeAt(i); }*/ foo5(int i) { return 'Hello'.codeUnitAt(i); // High-only bounds check. } @pragma('dart2js:never-inline') @pragma('dart2js:index-bounds:trust') /*member: foo6:function(i) { return "Hello".charCodeAt(i); }*/ foo6(int i) { return 'Hello'.codeUnitAt(i); // No bound check, as requested. } @pragma('dart2js:never-inline') @pragma('dart2js:index-bounds:trust') /*spec|canary.member: foo7:function(i) { return "Hello".charCodeAt(A._asInt(i)); }*/ /*prod.member: foo7:function(i) { return B.JSString_methods.codeUnitAt$1("Hello", i); }*/ foo7(dynamic i) { return 'Hello'.codeUnitAt(i); // No folding of index type error even when bounds check removed. } /*member: main:ignore*/ main() { foo1(); foo2(); foo3(); foo4(-9); foo4(0); foo4(100); foo5(0); foo5(100); foo6(-9); foo6(0); foo6(100); foo7(0); foo7('x'); }