|  | // Copyright (c) 2015, 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. | 
|  |  | 
|  | import 'package:source_span/source_span.dart'; | 
|  |  | 
|  | /// Runs [body] and wraps any format exceptions it produces. | 
|  | /// | 
|  | /// [name] should describe the type of thing being parsed, and [value] should be | 
|  | /// its actual value. | 
|  | T wrapFormatException<T>(String name, String value, T Function() body) { | 
|  | try { | 
|  | return body(); | 
|  | } on SourceSpanFormatException catch (error) { | 
|  | throw SourceSpanFormatException( | 
|  | 'Invalid $name: ${error.message}', error.span, error.source); | 
|  | } on FormatException catch (error) { | 
|  | throw FormatException( | 
|  | 'Invalid $name "$value": ${error.message}', error.source, error.offset); | 
|  | } | 
|  | } |