| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.semantics_visitor_test; | 5 library dart2js.semantics_visitor_test; |
| 6 | 6 |
| 7 import 'package:async_helper/async_helper.dart'; | 7 import 'package:async_helper/async_helper.dart'; |
| 8 import 'package:expect/expect.dart'; | 8 import 'package:expect/expect.dart'; |
| 9 import 'package:compiler/src/constants/expressions.dart'; | 9 import 'package:compiler/src/constants/expressions.dart'; |
| 10 import 'package:compiler/src/dart_types.dart'; | 10 import 'package:compiler/src/dart_types.dart'; |
| (...skipping 2127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 arg) { | 2138 arg) { |
| 2139 visits.add(new Visit(VisitKind.VISIT_INDEX, | 2139 visits.add(new Visit(VisitKind.VISIT_INDEX, |
| 2140 receiver: receiver, index: index)); | 2140 receiver: receiver, index: index)); |
| 2141 apply(receiver, arg); | 2141 apply(receiver, arg); |
| 2142 apply(index, arg); | 2142 apply(index, arg); |
| 2143 } | 2143 } |
| 2144 | 2144 |
| 2145 @override | 2145 @override |
| 2146 visitClassTypeLiteralGet( | 2146 visitClassTypeLiteralGet( |
| 2147 Send node, | 2147 Send node, |
| 2148 TypeConstantExpression constant, | 2148 ConstantExpression constant, |
| 2149 arg) { | 2149 arg) { |
| 2150 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, | 2150 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, |
| 2151 constant: constant.getText())); | 2151 constant: constant.getText())); |
| 2152 } | 2152 } |
| 2153 | 2153 |
| 2154 @override | 2154 @override |
| 2155 visitClassTypeLiteralInvoke( | 2155 visitClassTypeLiteralInvoke( |
| 2156 Send node, | 2156 Send node, |
| 2157 TypeConstantExpression constant, | 2157 ConstantExpression constant, |
| 2158 NodeList arguments, | 2158 NodeList arguments, |
| 2159 Selector selector, | 2159 Selector selector, |
| 2160 arg) { | 2160 arg) { |
| 2161 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, | 2161 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, |
| 2162 constant: constant.getText(), arguments: arguments)); | 2162 constant: constant.getText(), arguments: arguments)); |
| 2163 apply(arguments, arg); | 2163 apply(arguments, arg); |
| 2164 } | 2164 } |
| 2165 | 2165 |
| 2166 @override | 2166 @override |
| 2167 errorClassTypeLiteralSet( | 2167 errorClassTypeLiteralSet( |
| 2168 SendSet node, | 2168 SendSet node, |
| 2169 TypeConstantExpression constant, | 2169 ConstantExpression constant, |
| 2170 Node rhs, | 2170 Node rhs, |
| 2171 arg) { | 2171 arg) { |
| 2172 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, | 2172 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, |
| 2173 constant: constant.getText(), rhs: rhs)); | 2173 constant: constant.getText(), rhs: rhs)); |
| 2174 apply(rhs, arg); | 2174 apply(rhs, arg); |
| 2175 } | 2175 } |
| 2176 | 2176 |
| 2177 @override | 2177 @override |
| 2178 visitNotEquals( | 2178 visitNotEquals( |
| 2179 Send node, | 2179 Send node, |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2243 Selector selector, | 2243 Selector selector, |
| 2244 Node rhs, | 2244 Node rhs, |
| 2245 arg) { | 2245 arg) { |
| 2246 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET, | 2246 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET, |
| 2247 receiver: receiver, name: selector.name, rhs: rhs)); | 2247 receiver: receiver, name: selector.name, rhs: rhs)); |
| 2248 } | 2248 } |
| 2249 | 2249 |
| 2250 @override | 2250 @override |
| 2251 visitDynamicTypeLiteralGet( | 2251 visitDynamicTypeLiteralGet( |
| 2252 Send node, | 2252 Send node, |
| 2253 TypeConstantExpression constant, | 2253 ConstantExpression constant, |
| 2254 arg) { | 2254 arg) { |
| 2255 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET, | 2255 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET, |
| 2256 constant: constant.getText())); | 2256 constant: constant.getText())); |
| 2257 } | 2257 } |
| 2258 | 2258 |
| 2259 @override | 2259 @override |
| 2260 visitDynamicTypeLiteralInvoke( | 2260 visitDynamicTypeLiteralInvoke( |
| 2261 Send node, | 2261 Send node, |
| 2262 TypeConstantExpression constant, | 2262 ConstantExpression constant, |
| 2263 NodeList arguments, | 2263 NodeList arguments, |
| 2264 Selector selector, | 2264 Selector selector, |
| 2265 arg) { | 2265 arg) { |
| 2266 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE, | 2266 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE, |
| 2267 constant: constant.getText(), arguments: arguments)); | 2267 constant: constant.getText(), arguments: arguments)); |
| 2268 } | 2268 } |
| 2269 | 2269 |
| 2270 @override | 2270 @override |
| 2271 errorDynamicTypeLiteralSet( | 2271 errorDynamicTypeLiteralSet( |
| 2272 Send node, | 2272 Send node, |
| 2273 TypeConstantExpression constant, | 2273 ConstantExpression constant, |
| 2274 Node rhs, | 2274 Node rhs, |
| 2275 arg) { | 2275 arg) { |
| 2276 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET, | 2276 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET, |
| 2277 rhs: rhs)); | 2277 rhs: rhs)); |
| 2278 apply(rhs, arg); | 2278 apply(rhs, arg); |
| 2279 } | 2279 } |
| 2280 | 2280 |
| 2281 @override | 2281 @override |
| 2282 visitExpressionInvoke( | 2282 visitExpressionInvoke( |
| 2283 Send node, | 2283 Send node, |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2695 Node rhs, | 2695 Node rhs, |
| 2696 arg) { | 2696 arg) { |
| 2697 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET, | 2697 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET, |
| 2698 element: element, rhs: rhs)); | 2698 element: element, rhs: rhs)); |
| 2699 apply(rhs, arg); | 2699 apply(rhs, arg); |
| 2700 } | 2700 } |
| 2701 | 2701 |
| 2702 @override | 2702 @override |
| 2703 visitTypedefTypeLiteralGet( | 2703 visitTypedefTypeLiteralGet( |
| 2704 Send node, | 2704 Send node, |
| 2705 TypeConstantExpression constant, | 2705 ConstantExpression constant, |
| 2706 arg) { | 2706 arg) { |
| 2707 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, | 2707 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, |
| 2708 constant: constant.getText())); | 2708 constant: constant.getText())); |
| 2709 } | 2709 } |
| 2710 | 2710 |
| 2711 @override | 2711 @override |
| 2712 visitTypedefTypeLiteralInvoke( | 2712 visitTypedefTypeLiteralInvoke( |
| 2713 Send node, | 2713 Send node, |
| 2714 TypeConstantExpression constant, | 2714 ConstantExpression constant, |
| 2715 NodeList arguments, | 2715 NodeList arguments, |
| 2716 Selector selector, | 2716 Selector selector, |
| 2717 arg) { | 2717 arg) { |
| 2718 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE, | 2718 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE, |
| 2719 constant: constant.getText(), arguments: arguments)); | 2719 constant: constant.getText(), arguments: arguments)); |
| 2720 apply(arguments, arg); | 2720 apply(arguments, arg); |
| 2721 } | 2721 } |
| 2722 | 2722 |
| 2723 @override | 2723 @override |
| 2724 errorTypedefTypeLiteralSet( | 2724 errorTypedefTypeLiteralSet( |
| 2725 SendSet node, | 2725 SendSet node, |
| 2726 TypeConstantExpression constant, | 2726 ConstantExpression constant, |
| 2727 Node rhs, | 2727 Node rhs, |
| 2728 arg) { | 2728 arg) { |
| 2729 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET, | 2729 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET, |
| 2730 constant: constant.getText(), rhs: rhs)); | 2730 constant: constant.getText(), rhs: rhs)); |
| 2731 apply(rhs, arg); | 2731 apply(rhs, arg); |
| 2732 } | 2732 } |
| 2733 | 2733 |
| 2734 @override | 2734 @override |
| 2735 visitUnary( | 2735 visitUnary( |
| 2736 Send node, | 2736 Send node, |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3337 visits.add(new Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET, | 3337 visits.add(new Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET, |
| 3338 getter: getter, setter: setter, | 3338 getter: getter, setter: setter, |
| 3339 index: index, rhs: rhs, operator: operator)); | 3339 index: index, rhs: rhs, operator: operator)); |
| 3340 apply(index, arg); | 3340 apply(index, arg); |
| 3341 apply(rhs, arg); | 3341 apply(rhs, arg); |
| 3342 } | 3342 } |
| 3343 | 3343 |
| 3344 @override | 3344 @override |
| 3345 errorClassTypeLiteralCompound( | 3345 errorClassTypeLiteralCompound( |
| 3346 Send node, | 3346 Send node, |
| 3347 TypeConstantExpression constant, | 3347 ConstantExpression constant, |
| 3348 AssignmentOperator operator, | 3348 AssignmentOperator operator, |
| 3349 Node rhs, | 3349 Node rhs, |
| 3350 arg) { | 3350 arg) { |
| 3351 visits.add(new Visit(VisitKind.ERROR_CLASS_TYPE_LITERAL_COMPOUND, | 3351 visits.add(new Visit(VisitKind.ERROR_CLASS_TYPE_LITERAL_COMPOUND, |
| 3352 constant: constant.getText(), operator: operator, rhs: rhs)); | 3352 constant: constant.getText(), operator: operator, rhs: rhs)); |
| 3353 apply(rhs, arg); | 3353 apply(rhs, arg); |
| 3354 } | 3354 } |
| 3355 | 3355 |
| 3356 @override | 3356 @override |
| 3357 errorDynamicTypeLiteralCompound( | 3357 errorDynamicTypeLiteralCompound( |
| 3358 Send node, | 3358 Send node, |
| 3359 TypeConstantExpression constant, | 3359 ConstantExpression constant, |
| 3360 AssignmentOperator operator, | 3360 AssignmentOperator operator, |
| 3361 Node rhs, | 3361 Node rhs, |
| 3362 arg) { | 3362 arg) { |
| 3363 visits.add(new Visit(VisitKind.ERROR_DYNAMIC_TYPE_LITERAL_COMPOUND, | 3363 visits.add(new Visit(VisitKind.ERROR_DYNAMIC_TYPE_LITERAL_COMPOUND, |
| 3364 constant: constant.getText(), operator: operator, rhs: rhs)); | 3364 constant: constant.getText(), operator: operator, rhs: rhs)); |
| 3365 apply(rhs, arg); | 3365 apply(rhs, arg); |
| 3366 } | 3366 } |
| 3367 | 3367 |
| 3368 @override | 3368 @override |
| 3369 errorTypeVariableTypeLiteralCompound( | 3369 errorTypeVariableTypeLiteralCompound( |
| 3370 Send node, | 3370 Send node, |
| 3371 TypeVariableElement element, | 3371 TypeVariableElement element, |
| 3372 AssignmentOperator operator, | 3372 AssignmentOperator operator, |
| 3373 Node rhs, | 3373 Node rhs, |
| 3374 arg) { | 3374 arg) { |
| 3375 visits.add(new Visit(VisitKind.ERROR_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND, | 3375 visits.add(new Visit(VisitKind.ERROR_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND, |
| 3376 element: element, operator: operator, rhs: rhs)); | 3376 element: element, operator: operator, rhs: rhs)); |
| 3377 apply(rhs, arg); | 3377 apply(rhs, arg); |
| 3378 } | 3378 } |
| 3379 | 3379 |
| 3380 @override | 3380 @override |
| 3381 errorTypedefTypeLiteralCompound( | 3381 errorTypedefTypeLiteralCompound( |
| 3382 Send node, | 3382 Send node, |
| 3383 TypeConstantExpression constant, | 3383 ConstantExpression constant, |
| 3384 AssignmentOperator operator, | 3384 AssignmentOperator operator, |
| 3385 Node rhs, | 3385 Node rhs, |
| 3386 arg) { | 3386 arg) { |
| 3387 visits.add(new Visit(VisitKind.ERROR_TYPEDEF_TYPE_LITERAL_COMPOUND, | 3387 visits.add(new Visit(VisitKind.ERROR_TYPEDEF_TYPE_LITERAL_COMPOUND, |
| 3388 constant: constant.getText(), operator: operator, rhs: rhs)); | 3388 constant: constant.getText(), operator: operator, rhs: rhs)); |
| 3389 apply(rhs, arg); | 3389 apply(rhs, arg); |
| 3390 } | 3390 } |
| 3391 | 3391 |
| 3392 @override | 3392 @override |
| 3393 errorLocalFunctionPrefix( | 3393 errorLocalFunctionPrefix( |
| 3394 Send node, | 3394 Send node, |
| 3395 LocalFunctionElement function, | 3395 LocalFunctionElement function, |
| 3396 IncDecOperator operator, | 3396 IncDecOperator operator, |
| 3397 arg) { | 3397 arg) { |
| 3398 // TODO: implement errorLocalFunctionPrefix | 3398 // TODO: implement errorLocalFunctionPrefix |
| 3399 } | 3399 } |
| 3400 | 3400 |
| 3401 @override | 3401 @override |
| 3402 errorClassTypeLiteralPrefix( | 3402 errorClassTypeLiteralPrefix( |
| 3403 Send node, | 3403 Send node, |
| 3404 TypeConstantExpression constant, | 3404 ConstantExpression constant, |
| 3405 IncDecOperator operator, | 3405 IncDecOperator operator, |
| 3406 arg) { | 3406 arg) { |
| 3407 visits.add(new Visit(VisitKind.ERROR_CLASS_TYPE_LITERAL_PREFIX, | 3407 visits.add(new Visit(VisitKind.ERROR_CLASS_TYPE_LITERAL_PREFIX, |
| 3408 constant: constant.getText(), operator: operator)); | 3408 constant: constant.getText(), operator: operator)); |
| 3409 } | 3409 } |
| 3410 | 3410 |
| 3411 @override | 3411 @override |
| 3412 errorDynamicTypeLiteralPrefix( | 3412 errorDynamicTypeLiteralPrefix( |
| 3413 Send node, | 3413 Send node, |
| 3414 TypeConstantExpression constant, | 3414 ConstantExpression constant, |
| 3415 IncDecOperator operator, | 3415 IncDecOperator operator, |
| 3416 arg) { | 3416 arg) { |
| 3417 visits.add(new Visit(VisitKind.ERROR_DYNAMIC_TYPE_LITERAL_PREFIX, | 3417 visits.add(new Visit(VisitKind.ERROR_DYNAMIC_TYPE_LITERAL_PREFIX, |
| 3418 constant: constant.getText(), operator: operator)); | 3418 constant: constant.getText(), operator: operator)); |
| 3419 } | 3419 } |
| 3420 | 3420 |
| 3421 @override | 3421 @override |
| 3422 visitLocalVariablePrefix( | 3422 visitLocalVariablePrefix( |
| 3423 Send node, | 3423 Send node, |
| 3424 LocalVariableElement variable, | 3424 LocalVariableElement variable, |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3581 TypeVariableElement element, | 3581 TypeVariableElement element, |
| 3582 IncDecOperator operator, | 3582 IncDecOperator operator, |
| 3583 arg) { | 3583 arg) { |
| 3584 visits.add(new Visit(VisitKind.ERROR_TYPE_VARIABLE_TYPE_LITERAL_PREFIX, | 3584 visits.add(new Visit(VisitKind.ERROR_TYPE_VARIABLE_TYPE_LITERAL_PREFIX, |
| 3585 element: element, operator: operator)); | 3585 element: element, operator: operator)); |
| 3586 } | 3586 } |
| 3587 | 3587 |
| 3588 @override | 3588 @override |
| 3589 errorTypedefTypeLiteralPrefix( | 3589 errorTypedefTypeLiteralPrefix( |
| 3590 Send node, | 3590 Send node, |
| 3591 TypeConstantExpression constant, | 3591 ConstantExpression constant, |
| 3592 IncDecOperator operator, | 3592 IncDecOperator operator, |
| 3593 arg) { | 3593 arg) { |
| 3594 visits.add(new Visit(VisitKind.ERROR_TYPEDEF_TYPE_LITERAL_PREFIX, | 3594 visits.add(new Visit(VisitKind.ERROR_TYPEDEF_TYPE_LITERAL_PREFIX, |
| 3595 constant: constant.getText(), operator: operator)); | 3595 constant: constant.getText(), operator: operator)); |
| 3596 } | 3596 } |
| 3597 | 3597 |
| 3598 @override | 3598 @override |
| 3599 errorLocalFunctionPostfix( | 3599 errorLocalFunctionPostfix( |
| 3600 Send node, | 3600 Send node, |
| 3601 LocalFunctionElement function, | 3601 LocalFunctionElement function, |
| 3602 IncDecOperator operator, | 3602 IncDecOperator operator, |
| 3603 arg) { | 3603 arg) { |
| 3604 // TODO: implement errorLocalFunctionPostfix | 3604 // TODO: implement errorLocalFunctionPostfix |
| 3605 } | 3605 } |
| 3606 | 3606 |
| 3607 @override | 3607 @override |
| 3608 errorClassTypeLiteralPostfix( | 3608 errorClassTypeLiteralPostfix( |
| 3609 Send node, | 3609 Send node, |
| 3610 TypeConstantExpression constant, | 3610 ConstantExpression constant, |
| 3611 IncDecOperator operator, | 3611 IncDecOperator operator, |
| 3612 arg) { | 3612 arg) { |
| 3613 visits.add(new Visit(VisitKind.ERROR_CLASS_TYPE_LITERAL_POSTFIX, | 3613 visits.add(new Visit(VisitKind.ERROR_CLASS_TYPE_LITERAL_POSTFIX, |
| 3614 constant: constant.getText(), operator: operator)); | 3614 constant: constant.getText(), operator: operator)); |
| 3615 } | 3615 } |
| 3616 | 3616 |
| 3617 @override | 3617 @override |
| 3618 errorDynamicTypeLiteralPostfix( | 3618 errorDynamicTypeLiteralPostfix( |
| 3619 Send node, | 3619 Send node, |
| 3620 TypeConstantExpression constant, | 3620 ConstantExpression constant, |
| 3621 IncDecOperator operator, | 3621 IncDecOperator operator, |
| 3622 arg) { | 3622 arg) { |
| 3623 visits.add(new Visit(VisitKind.ERROR_DYNAMIC_TYPE_LITERAL_POSTFIX, | 3623 visits.add(new Visit(VisitKind.ERROR_DYNAMIC_TYPE_LITERAL_POSTFIX, |
| 3624 constant: constant.getText(), operator: operator)); | 3624 constant: constant.getText(), operator: operator)); |
| 3625 } | 3625 } |
| 3626 | 3626 |
| 3627 @override | 3627 @override |
| 3628 visitLocalVariablePostfix( | 3628 visitLocalVariablePostfix( |
| 3629 Send node, | 3629 Send node, |
| 3630 LocalVariableElement variable, | 3630 LocalVariableElement variable, |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3787 TypeVariableElement element, | 3787 TypeVariableElement element, |
| 3788 IncDecOperator operator, | 3788 IncDecOperator operator, |
| 3789 arg) { | 3789 arg) { |
| 3790 visits.add(new Visit(VisitKind.ERROR_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX, | 3790 visits.add(new Visit(VisitKind.ERROR_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX, |
| 3791 element: element, operator: operator)); | 3791 element: element, operator: operator)); |
| 3792 } | 3792 } |
| 3793 | 3793 |
| 3794 @override | 3794 @override |
| 3795 errorTypedefTypeLiteralPostfix( | 3795 errorTypedefTypeLiteralPostfix( |
| 3796 Send node, | 3796 Send node, |
| 3797 TypeConstantExpression constant, | 3797 ConstantExpression constant, |
| 3798 IncDecOperator operator, | 3798 IncDecOperator operator, |
| 3799 arg) { | 3799 arg) { |
| 3800 visits.add(new Visit(VisitKind.ERROR_TYPEDEF_TYPE_LITERAL_POSTFIX, | 3800 visits.add(new Visit(VisitKind.ERROR_TYPEDEF_TYPE_LITERAL_POSTFIX, |
| 3801 constant: constant.getText(), operator: operator)); | 3801 constant: constant.getText(), operator: operator)); |
| 3802 } | 3802 } |
| 3803 | 3803 |
| 3804 @override | 3804 @override |
| 3805 visitConstantGet( | 3805 visitConstantGet( |
| 3806 Send node, | 3806 Send node, |
| 3807 ConstantExpression constant, | 3807 ConstantExpression constant, |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4169 | 4169 |
| 4170 VISIT_ASSERT, | 4170 VISIT_ASSERT, |
| 4171 VISIT_LOGICAL_AND, | 4171 VISIT_LOGICAL_AND, |
| 4172 VISIT_LOGICAL_OR, | 4172 VISIT_LOGICAL_OR, |
| 4173 VISIT_IS, | 4173 VISIT_IS, |
| 4174 VISIT_IS_NOT, | 4174 VISIT_IS_NOT, |
| 4175 VISIT_AS, | 4175 VISIT_AS, |
| 4176 | 4176 |
| 4177 // TODO(johnniwinther): Add tests for error cases. | 4177 // TODO(johnniwinther): Add tests for error cases. |
| 4178 } | 4178 } |
| OLD | NEW |