diff --git a/packages/combinator/lib/src/combinator/combinator.dart b/packages/combinator/lib/src/combinator/combinator.dart index 280699a6..4511467a 100644 --- a/packages/combinator/lib/src/combinator/combinator.dart +++ b/packages/combinator/lib/src/combinator/combinator.dart @@ -123,7 +123,7 @@ abstract class Parser { /// Removes multiple errors that occur in the same spot; this can reduce noise in parser output. Parser foldErrors({bool equal(SyntaxError a, SyntaxError b)?}) { - equal ??= (b, e) => b.span!.start.offset == e.span!.start.offset; + equal ??= (b, e) => b.span?.start.offset == e.span?.start.offset; return _FoldErrors(this, equal); } @@ -308,10 +308,10 @@ abstract class ListParser extends Parser> { /// Modifies this parser, returning only the values that match a predicate. Parser> where(bool Function(T) f) => - map>((r) => r.value!.where(f).toList()); + map>((r) => r.value?.where(f).toList() ?? []); /// Condenses a [ListParser] into having a value of the combined span's text. - Parser flatten() => map((r) => r.span!.text); + Parser flatten() => map((r) => r.span?.text ?? ''); } /// Prevents stack overflow in recursive parsers. @@ -325,7 +325,7 @@ class Trampoline { } ParseResult getMemoized(Parser parser, int position) { - return _memo[parser]!.firstWhere((t) => t.item1 == position).item2 + return _memo[parser]?.firstWhere((t) => t.item1 == position).item2 as ParseResult; } @@ -350,7 +350,7 @@ class Trampoline { } void exit(Parser parser) { - if (_active.containsKey(parser)) _active[parser]!.removeFirst(); + if (_active.containsKey(parser)) _active[parser]?.removeFirst(); } }