| // 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(); |
| } |