blob: df046b4211f490358b12cde0c2b9c83abd28277d [file] [log] [blame]
// 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.
//
// Test that ensure that we correctly handle this reference from within the
// try/catch even if it is captured.
import 'package:expect/expect.dart';
var f;
class X {
final String field;
X(this.field);
// We use toString as a selector here to make sure that it is not eligible
// for any potential transformations which remove named parameters.
@pragma('vm:never-inline')
String toString({required String prefix}) {
f = () => this.field;
try {
return int.parse(prefix + this.field).toString();
} catch (e) {
return '${prefix}${this.field.length}';
}
}
}
void main() {
final tests = [
['1', '11'],
['2', '22'],
['three', 'three5']
];
for (var test in tests) {
final input = test[0];
final output = test[1];
Expect.equals(output, X(input).toString(prefix: input));
Expect.equals(input, f());
}
try {
f().toString(); // to have an invocation of toString from dynamic context.
} catch (e) {}
}