conlang: add lang items, remove Empty, and shuffle typeck

This commit is contained in:
2025-09-15 10:45:14 -04:00
parent ead1f351a7
commit f41e5fc49a
26 changed files with 172 additions and 154 deletions

View File

@@ -464,13 +464,18 @@ impl Parse<'_> for Function {
let gens = Generics::parse(p)?;
let ((bind, types), span) = delim(Spanned::<FnSig>::parse, PARENS, P)(p)?;
let sign = TyFn {
args: Box::new(match types.len() {
0 => Ty { span, kind: TyKind::Empty, gens: Default::default() },
_ => Ty { span, kind: TyKind::Tuple(TyTuple { types }), gens: Default::default() },
args: Box::new(Ty {
span,
kind: TyKind::Tuple(TyTuple { types }),
gens: Default::default(),
}),
rety: Box::new(match p.match_type(TokenKind::Arrow, Parsing::TyFn) {
Ok(_) => Ty::parse(p)?,
Err(_) => Ty { span, kind: TyKind::Empty, gens: Generics { vars: vec![] } },
Err(_) => Ty {
span,
kind: TyKind::Tuple(TyTuple { types: vec![] }),
gens: Generics { vars: vec![] },
},
}),
};
Ok(Function {
@@ -736,10 +741,7 @@ impl Parse<'_> for TyKind {
}
TokenKind::LParen => {
let out = TyTuple::parse(p)?;
match out.types.is_empty() {
true => TyKind::Empty,
false => TyKind::Tuple(out),
}
TyKind::Tuple(out)
}
TokenKind::Fn => TyFn::parse(p)?.into(),
path_like!() => {
@@ -802,15 +804,18 @@ impl Parse<'_> for TyFn {
let span = Span(head, p.loc());
Ok(TyFn {
args: Box::new(match args {
t if t.is_empty() => Ty { kind: TyKind::Empty, span, gens: Default::default() },
types => {
Ty { kind: TyKind::Tuple(TyTuple { types }), span, gens: Default::default() }
}
args: Box::new(Ty {
kind: TyKind::Tuple(TyTuple { types: args }),
span,
gens: Default::default(),
}),
rety: Box::new(match p.match_type(TokenKind::Arrow, Parsing::TyFn) {
Ok(_) => Ty::parse(p)?,
Err(_) => Ty { span, kind: TyKind::Empty, gens: Generics { vars: vec![] } },
Err(_) => Ty {
span,
kind: TyKind::Tuple(TyTuple { types: vec![] }),
gens: Generics { vars: vec![] },
},
}),
})
}