blob: d1b7bbd838979a0e147cafe198ed969b63a7e11f [file] [log] [blame]
// Copyright (c) 2024, 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 of various space-saving contractions of calls to
// `throwUnsupportedOperation`.
import 'dart:_foreign_helper' show ArrayFlags, HArrayFlagsCheck;
@pragma('dart2js:never-inline')
// The operation and verb are both elided.
/*member: indexSetter:function() {
A.throwUnsupportedOperation(B.List_empty);
}*/
indexSetter() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'[]=',
'modify',
);
}
@pragma('dart2js:never-inline')
// The operation is reduced to an index but cannot be elided because it is
// followed by a non-elided verb.
/*member: indexSetterUnusualVerb:function() {
A.throwUnsupportedOperation(B.List_empty, 0, "change contents of");
}*/
indexSetterUnusualVerb() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'[]=',
'change contents of',
);
}
@pragma('dart2js:never-inline')
// The verb is elided.
/*member: unusualOperationModify:function() {
A.throwUnsupportedOperation(B.List_empty, "rub");
}*/
unusualOperationModify() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'rub',
'modify',
);
}
@pragma('dart2js:never-inline')
// The operation is left as a string and verb is
/*member: unusualOperationRemoveFrom:function() {
A.throwUnsupportedOperation(B.List_empty, "rub", 1);
}*/
unusualOperationRemoveFrom() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'rub',
'remove from',
);
}
@pragma('dart2js:never-inline')
// The operation and verb are left as strings.
/*member: unusualOperationAndVerb:function() {
A.throwUnsupportedOperation(B.List_empty, "rub", "burnish");
}*/
unusualOperationAndVerb() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'rub',
'burnish',
);
}
@pragma('dart2js:never-inline')
// The operation is reduced to an index and the verb is elided.
/*member: knownOperationModify:function() {
A.throwUnsupportedOperation(B.List_empty, 10);
}*/
knownOperationModify() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'setUint16',
'modify',
);
}
@pragma('dart2js:never-inline')
// The operation and verb are combined to a single number.
/*member: knownOperationAndVerb:function() {
A.throwUnsupportedOperation(B.List_empty, 16);
}*/
knownOperationAndVerb() {
HArrayFlagsCheck(
const [],
ArrayFlags.constant,
ArrayFlags.unmodifiableCheck,
'removeWhere',
'remove from',
);
}
/*member: main:ignore*/
main() {
indexSetter();
indexSetterUnusualVerb();
unusualOperationModify();
unusualOperationRemoveFrom();
unusualOperationAndVerb();
knownOperationModify();
knownOperationAndVerb();
}