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