blob: 35f4456c59b6dd76f7e46df23235f28ea362fe23 [file] [log] [blame]
import 'package:meta/meta.dart';
import '../core/token.dart';
import '../shared/annotations.dart';
import 'failure.dart';
import 'success.dart';
/// An immutable parse context.
@immutable
class Context {
const Context(this.buffer, this.position);
/// The buffer we are working on.
final String buffer;
/// The current position in the [buffer].
final int position;
/// Returns a result indicating a parse success.
@inlineVm
@inlineJs
@useResult
Success<R> success<R>(R result, [int? position]) =>
Success<R>(buffer, position ?? this.position, result);
/// Returns a result indicating a parse failure.
@inlineVm
@inlineJs
@useResult
Failure<R> failure<R>(String message, [int? position]) =>
Failure<R>(buffer, position ?? this.position, message);
/// Returns the current line:column position in the [buffer].
String toPositionString() => Token.positionString(buffer, position);
@override
String toString() => 'Context[${toPositionString()}]';
}