yultsur icon indicating copy to clipboard operation
yultsur copied to clipboard

[Don't merge] TypedIdentifier, Box<str> and other tweaks

Open maciejhirsz opened this issue 6 years ago • 3 comments

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 use Vec<TypedIdentifier> instead of Vec<Identifier>.~
  • Identifier is now a newtype wrapping a Box<str>, following the grammar spec it does not allow a type to be attached.
    • Using Box<str> instead of String to reduce the size of the AST in memory. Previously Identifier used to take 7 words (56 bytes on 64bit arch), now Identifier takes 2 words while TypedIdentifier takes 5.
  • ~Added From impls to easily create instances of Identifier from string literals ("foo".into() or Identifier::from("foo")).~
  • Literal now uses Box<str> instead of String (same reason as above) and must have a type as per grammar definition.
  • Added convenience From imps for Literal that allows to quickly create them from Rust literals (eg. Literal::from(42u8) == Literal { literal: "42".into(), yultype: Type::Uint8 }).
  • ~Validator impl for Identifier checks that the identifier is in accordance with the grammar.~
  • ~Changed the error type from String to &'static str in the validator, although custom enum or using the error_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 using Display is the best choice here, a custom trait could be way more efficient and would allow for different formatting options, if needed.

maciejhirsz avatar Nov 06 '18 17:11 maciejhirsz