[Don't merge] TypedIdentifier, Box<str> and other tweaks #5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Will be crossing out things in this PR as they are moved to their own smaller PRs:
AddedTypedIdentifier
, 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.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.AddedFrom
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.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 fromString
to&'static str
in the validator, although customenum
or using theerror_chain
crate would be better here I reckon.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.