mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
Parse builders without backtracking from records
This commit is contained in:
parent
c3bcb88c5b
commit
f94004d137
5 changed files with 293 additions and 99 deletions
|
@ -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),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue