Skip to content

Commit 8e141f3

Browse files
committed
Add @useResult to parser constructors to avoid bugs when using the old parser instance.
1 parent 3dd5190 commit 8e141f3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+165
-1
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 5.2.0 (unpublished)
4+
5+
- Add `@useResult` to parser constructors to avoid bugs when using the old parser instance.
6+
37
## 5.1.0
48

59
- Dart 2.18 requirement.

bin/generate_sequence.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Future<void> generateImplementation(int index) async {
6161
out.writeln('/// Creates a parser that consumes a sequence of $index parsers '
6262
'and returns a ');
6363
out.writeln('/// typed sequence [Sequence$index].');
64+
out.writeln('@useResult');
6465
out.writeln('Parser<Sequence$index<${resultTypes.join(', ')}>> '
6566
'seq$index<${resultTypes.join(', ')}>(');
6667
for (var i = 0; i < index; i++) {

lib/src/context/context.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ class Context {
1919
/// Returns a result indicating a parse success.
2020
@inlineVm
2121
@inlineJs
22+
@useResult
2223
Success<R> success<R>(R result, [int? position]) =>
2324
Success<R>(buffer, position ?? this.position, result);
2425

2526
/// Returns a result indicating a parse failure.
2627
@inlineVm
2728
@inlineJs
29+
@useResult
2830
Failure<R> failure<R>(String message, [int? position]) =>
2931
Failure<R>(buffer, position ?? this.position, message);
3032

lib/src/parser/action/cast.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
46
import '../combinator/delegate.dart';
57

68
extension CastParserExtension<T> on Parser<T> {
79
/// Returns a parser that casts itself to `Parser<R>`.
10+
@useResult
811
Parser<R> cast<R>() => CastParser<T, R>(this);
912
}
1013

lib/src/parser/action/cast_list.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
@@ -6,6 +8,7 @@ import '../combinator/delegate.dart';
68
extension CastListParserExtension<T> on Parser<T> {
79
/// Returns a parser that casts itself to `Parser<List<R>>`. Assumes this
810
/// parser to be of type `Parser<List>`.
11+
@useResult
912
Parser<List<R>> castList<R>() => CastListParser<T, R>(this);
1013
}
1114

lib/src/parser/action/continuation.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
@@ -29,6 +31,7 @@ extension ContinuationParserExtension<T> on Parser<T> {
2931
/// return result;
3032
/// });
3133
///
34+
@useResult
3235
Parser<R> callCC<R>(ContinuationHandler<T, R> handler) =>
3336
ContinuationParser<T, R>(this, handler);
3437
}

lib/src/parser/action/flatten.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
@@ -14,6 +16,7 @@ extension FlattenParserExtension<T> on Parser<T> {
1416
/// For example, the parser `letter().plus().flatten()` returns `'abc'`
1517
/// for the input `'abc'`. In contrast, the parser `letter().plus()` would
1618
/// return `['a', 'b', 'c']` for the same input instead.
19+
@useResult
1720
Parser<String> flatten([String? message]) => FlattenParser<T>(this, message);
1821
}
1922

lib/src/parser/action/map.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
@@ -11,6 +13,7 @@ extension MapParserExtension<T> on Parser<T> {
1113
/// For example, the parser `digit().map((char) => int.parse(char))` returns
1214
/// the number `1` for the input string `'1'`. If the delegate fails, the
1315
/// production action is not executed and the failure is passed on.
16+
@useResult
1417
Parser<R> map<R>(
1518
Callback<T, R> callback, {
1619
@Deprecated('All callbacks are considered to have side-effects.')

lib/src/parser/action/permute.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
@@ -11,6 +13,7 @@ extension PermuteParserExtension<T> on Parser<List<T>> {
1113
/// For example, the parser `letter().star().permute([0, -1])` returns the
1214
/// first and last letter parsed. For the input `'abc'` it returns
1315
/// `['a', 'c']`.
16+
@useResult
1417
Parser<List<T>> permute(List<int> indexes) => PermuteParser<T>(this, indexes);
1518
}
1619

lib/src/parser/action/pick.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:meta/meta.dart';
2+
13
import '../../context/context.dart';
24
import '../../context/result.dart';
35
import '../../core/parser.dart';
@@ -10,6 +12,7 @@ extension PickParserExtension<T> on Parser<List<T>> {
1012
///
1113
/// For example, the parser `letter().star().pick(-1)` returns the last
1214
/// letter parsed. For the input `'abc'` it returns `'c'`.
15+
@useResult
1316
Parser<T> pick(int index) => PickParser<T>(this, index);
1417
}
1518

0 commit comments

Comments
 (0)