yultsur
yultsur copied to clipboard
[Don't merge] TypedIdentifier, Box<str> and other tweaks
Will be crossing out things in this PR as they are moved to their own smaller PRs:
- ~Added
TypedIdentifier
, following the grammar spec, that must have a type. Function definitions and variable declarations now useVec<TypedIdentifier>
instead ofVec<Identifier>
.~ -
Identifier
is now a newtype wrapping aBox<str>
, following the grammar spec it does not allow a type to be attached.- Using
Box<str>
instead ofString
to reduce the size of the AST in memory. PreviouslyIdentifier
used to take 7 words (56 bytes on 64bit arch), nowIdentifier
takes 2 words whileTypedIdentifier
takes 5.
- Using
- ~Added
From
impls to easily create instances ofIdentifier
from string literals ("foo".into()
orIdentifier::from("foo")
).~ -
Literal
now usesBox<str>
instead ofString
(same reason as above) and must have a type as per grammar definition. - Added convenience
From
imps forLiteral
that allows to quickly create them from Rust literals (eg.Literal::from(42u8) == Literal { literal: "42".into(), yultype: Type::Uint8 }
). - ~
Validator
impl forIdentifier
checks that the identifier is in accordance with the grammar.~ - ~Changed the error type from
String
to&'static str
in the validator, although customenum
or using theerror_chain
crate would be better here I reckon.~ - Some
Display
impls got their list printing reworked with a helper function that is much more efficient. I'm not sure if usingDisplay
is the best choice here, a custom trait could be way more efficient and would allow for different formatting options, if needed.