chalk icon indicating copy to clipboard operation
chalk copied to clipboard

Don't treat primitives as a separate syntactic class

Open camelid opened this issue 4 years ago • 2 comments

Currently types like i32, f32, and str are a separate syntactic class, which means that code like struct i32 {} produces confusing errors:

error: parse error: Unrecognized token `i32` found at 7:10
Expected one of r#"([A-Za-z]|_)([A-Za-z0-9]|_)*"#

I can't think of a reason off the top of my head why primitives have to be special-cased in the parser rather than just being declared in libstd.chalk (or even the IR or something). If there's a reason, I'm curious to here it!

This is probably low-priority, but it might be nice to change.

See the Zulip discussion.

camelid avatar Oct 24 '20 20:10 camelid

They can't be declared in libstd.chalk because i32 is not the same as struct i32 {}, from chalks point of view.

As for declaring them in IR, I don't see any benefit in trying to reparse type names to figure out if they are in fact a primitive type when performing AST lowering. It would just transfer the complexity from the parser to lowering.

basil-cow avatar Feb 10 '21 09:02 basil-cow

chalk's parser isn't really meant to be "general purpose", it's more for writing tests, so I'm not overly concerned

nikomatsakis avatar Feb 10 '21 14:02 nikomatsakis