Parse builders without backtracking from records

This commit is contained in:
Agustin Zubiaga 2023-05-13 20:05:42 -03:00
parent c3bcb88c5b
commit f94004d137
5 changed files with 293 additions and 99 deletions

View file

@ -97,7 +97,6 @@ impl_space_problem! {
EPattern<'a>,
EProvides<'a>,
ERecord<'a>,
ERecordBuilder<'a>,
ERequires<'a>,
EString<'a>,
EType<'a>,
@ -359,7 +358,8 @@ pub enum EExpr<'a> {
InParens(EInParens<'a>, Position),
Record(ERecord<'a>, Position),
RecordBuilder(ERecordBuilder<'a>, Position),
OptionalValueInRecordBuilder(Region),
RecordUpdateBuilder(Region),
// SingleQuote errors are folded into the EString
Str(EString<'a>, Position),
@ -412,6 +412,7 @@ pub enum ERecord<'a> {
Field(Position),
Colon(Position),
QuestionMark(Position),
Arrow(Position),
Ampersand(Position),
// TODO remove
@ -420,20 +421,6 @@ pub enum ERecord<'a> {
Space(BadInputError, Position),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ERecordBuilder<'a> {
End(Position),
Open(Position),
Field(Position),
Colon(Position),
Arrow(Position),
Expr(&'a EExpr<'a>, Position),
Space(BadInputError, Position),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EInParens<'a> {
End(Position),
@ -691,6 +678,7 @@ pub enum ETypeAbilityImpl<'a> {
Field(Position),
Colon(Position),
Arrow(Position),
Optional(Position),
Type(&'a EType<'a>, Position),
@ -711,6 +699,7 @@ impl<'a> From<ERecord<'a>> for ETypeAbilityImpl<'a> {
ERecord::Open(p) => ETypeAbilityImpl::Open(p),
ERecord::Field(p) => ETypeAbilityImpl::Field(p),
ERecord::Colon(p) => ETypeAbilityImpl::Colon(p),
ERecord::Arrow(p) => ETypeAbilityImpl::Arrow(p),
ERecord::Space(s, p) => ETypeAbilityImpl::Space(s, p),
ERecord::Updateable(p) => ETypeAbilityImpl::Updateable(p),
ERecord::QuestionMark(p) => ETypeAbilityImpl::QuestionMark(p),