1. 04 Oct, 2021 1 commit
    • Robin Freyler's avatar
      Implement selector_id!, selector_bytes! and blake2x256! macros (#947) · bd4b51e3
      Robin Freyler authored
      * add selector_id! and selector_bytes! proc macros
      
      * implement blake2x256! macro
      
      * re-export blake2x256! macro from ink_lang crate
      
      * apply rustfmt
      
      * add BLAKE2b to hunspell dictionary
      
      * add UI tests for blake2x256! macro
      
      * improve span for non-literal inputs to blake2x256! macro
      
      * add non-literal input failure UI test to blake2x256! macro
      
      * improve error span for non-literal selector_{id,bytes}! macro inputs
      
      * rename UI test blake2x256 -> blake2x256_macro
      
      * rename UI test
      
      * add UI tests for selector_id! proc. macro
      
      * fix UI test
      
      * fix UI test expectation
      
      * add UI tests for seletor_bytes! macro
      
      * make flaky and broken codecov CI happy again ...
      bd4b51e3
  2. 21 Sep, 2021 1 commit
    • Robin Freyler's avatar
      Refactor and modernize dispatch codegen (#933) · 0270add0
      Robin Freyler authored
      * implement Display for ink_lang::Error
      
      * re-export HexLiteral trait from ink_lang_ir crate
      
      * use big-letters for hex-encoded message and constructor identifiers in codegen
      
      * improve panic messages in dispatch codegen for call and deploy fns
      
      * improve macro hygiene in dispatch codegen
      
      * add ir::Selector::into_be_u32 method
      
      * improve and modernize dispatch selector namespace codegen
      0270add0
  3. 20 Sep, 2021 1 commit
    • Robin Freyler's avatar
      Expand selectors as hex-encoded literals in metadata (#927) · 725c2f70
      Robin Freyler authored
      * add HexLiteral utility trait to expand hex-encoded integer literals
      
      * add ir::Selector::hex_lits method
      
      * expand into hex-encoded integer literals for metadata selectors
      
      * simplify Selector::hex_lits method using array::map API
      
      * add unit test for Selector::hex_lits method
      725c2f70
  4. 04 Feb, 2021 1 commit
    • Hero Bird's avatar
      Use BLAKE2b 256-bit hashes for selectors (#680) · e22a0feb
      Hero Bird authored
      * use BLAKE2b 256-bit hashes for selectors
      
      Before this PR we accidentally used BLAKE2b 512-bit hashing.
      Using 256-bit versions is important for smart contracts so that smart contracts can compute selector hashes on their own through the built-in contracts-pallet hash support which includes BLAKE2b 256-bit but not 512-bit.
      
      * apply rustfmt
      e22a0feb
  5. 04 Jan, 2021 1 commit
  6. 29 Sep, 2020 1 commit
    • Hero Bird's avatar
      Move all ink! crates into the crates directory (#494) · 31276d89
      Hero Bird authored
      * [*] move all ink! crates into crates/ directory
      
      * [ci] adjust .gitab-ci.yml to crates/ directory
      
      * [ci] fix GitLab .gitlab-ci.yml (attempt #2)
      
      * [ci] forgot some lines in attempt #2
      
      * [examples] fix example smart contracts
      
      They need to readjust their paths for the crates/ directory.
      31276d89
  7. 02 Jul, 2020 1 commit
    • Hero Bird's avatar
      Implement trait support - Part 1/3 - New ink! IR (#451) · c24f0ff9
      Hero Bird authored
      
      
      * [lang/macro] move some items around
      
      * [lang/macro] rename AttributeFlag -> AttributeArg
      
      This is in order to sync naming with the syn crate.
      
      * [lang/macro] implement ink! config parameter parsing
      
      * [lang/macro] add doc comment to into_nested_meta helper function
      
      * [lang/macro] add preliminary ast module
      
      * [lang/macro] replace usage of ink_primitives::hash module
      
      * [lang/macro] slightly refactor Selector
      
      * [lang/macro] fully implement AttributeArgs definitions + tests
      
      * [lang/macro] add IntoIterator for AttributeArgs
      
      * [lang/macro] base ir2::Config on the new ast::AttributeArgs definitions
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] add some ToTokens implementations
      
      * [lang/macro] add unit tests for ir2::Config
      
      * [lang/macro] introduce general Error type
      
      * [lang/macro] remove RustItem
      
      * [lang/macro] follow-up: remove RustItem
      
      * [lang/macro] add ir2::contains_ink_attributes helper function
      
      * [lang/macro] initial skeleton for TryFrom<syn::Item> for ir2::Item impl
      
      * [lang/macro] add first_ink_attribute helper function
      
      * [lang/macro] refactor initial skeleton for ir2::Item TryFrom impl
      
      * [lang/macro] re-export first_ink_attribute to ir2 module
      
      * [lang/macro] add unit tests for contains_ink_attributes and first_ink_attribute
      
      * [lang/macro] enhance initial TryFrom skeleton for ir2::Item
      
      * [lang/macro] simplify item_attrs
      
      * [lang/macro] further simplify item_attrs
      
      * [lang/macro] minor improvement
      
      * [lang/macro] add ExtError to extend syn::Error
      
      * [lang/macro] add Attrs trait to extract attributes from syn types
      
      * [lang/macro] re-base error infrastructure on to syn::Error
      
      * [lang/macro] adjust unit tests for new error infrastructure
      
      * [lang/macro] remove old error types
      
      * [lang/macro] use syn::Error in ir2::Config
      
      * [lang/macro] adjust Config unit tests for syn::Error usage
      
      * [lang/macro] rename ensure_no_duplicates -> ensure_no_duplicate_attrs
      
      * [lang/macro] add AttributeArg::kind method
      
      * [lang/macro] use full type path
      
      * [lang/macro] implement InkAttribute::from_expanded
      
      * [lang/macro] implement ir2::Storage TryFrom
      
      * [lang/macro] minor refactor
      
      * [lang/macro] add InkAttribute::ensure_no_conflicts
      
      * [lang/macro] add some failure paths to TryFrom<_> for ink! Storage struct
      
      * [lang/macro] add unit tests for ink! storage struct conversion
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] fix some clippy warnings
      
      * [lang/macro] rename Storage::item_struct field to ast
      
      * [lang/macro] rename Event::item_struct -> ast
      
      * [lang/macro] add some method and an iterator to ink! event struct
      
      * [lang/macro] add initial implementation of ink! event's TryFrom
      
      * [lang/macro] add derives for Debug, PartialEq and Eq for ink! event
      
      * [lang/macro] add initial success path unit tests for TryFrom for ink! event
      
      * [lang/macro] fix bug with #[ink(topic)] annotated event fields
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] apply clippy suggestion
      
      * [lang/macro] add first bunch of failure event TryFrom unit tests
      
      * [lang/macro] normalize the current failure event unit tests
      
      * [lang/macro] add more event unit tests for topics on fields
      
      * [lang/macro] add Debug, PartialEq and Eq derives for some ir2 types
      
      * [lang/macro] add unit tests for ir2::Item
      
      * [lang/macro] add ir2::ImplBlock::is_ink_impl_block
      
      * [lang/macro] add doc comment note
      
      * [lang/macro] rename ImplBlockItem::Rust -> Other
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] add stub TryFrom impls for Constructor and Message
      
      * [lang/macro] add TryFrom impl for ir2::ImplBlockItem
      
      * [lang/macro] add initial skeleton for TryFrom impl for ir::ImplBlock
      
      * [lang/macro] implement ir2::sanitize_attributes
      
      * [lang/macro] split impl_block.rs into multiple files as sub modules
      
      * [lang/macro] apply rustfmt + remove unused imports
      
      * [lang/macro] split item module into multiple modules
      
      * [lang/macro] finalize move into multiple files from commit before
      
      * [lang/macro] add lots of error checks to TryFrom for Message
      
      * [lang/macro] improve TryFrom tests for ir2::ImplBlock
      
      * [lang/macro] make Event and Storage use ir2::sanitize_attributes
      
      * [lang/macro] add additional constructors for Iter{Constructors, Messages}
      
      * [lang/macro] add visibility check to Message TryFrom impl
      
      * [lang/macro] add Message::Visibility and getter
      
      * [lang/macro] implement Message::receiver getter
      
      * [lang/macro] extend ImplBlock doc comment note section
      
      * [lang/macro] add Message::Visibility getters
      
      * [lang/macro] refactor Receiver getters
      
      * [lang/macro] fix doc comment
      
      * [lang/macro] add unit test for Message::visibility getter
      
      * [lang/macro] add unit test for Message::receiver getter
      
      * [lang/macro] move Visibility from message.rs to impl_item.rs
      
      * [lang/macro] add Constructor::visibility getter
      
      * [lang/macro] implement callable.rs
      
      * [lang/macro] make use of new shared callable.rs utilities
      
      * [lang/macro] remove visibility from impl_item.rs
      
      * [lang/macro] fix some imports
      
      * [lang/macro] implement constructor check for missing return type
      
      * [lang/macro] implement constructor check for invalid self receiver
      
      * [lang/macro] add some ink! constructor try_from unit tests
      
      * [lang/macro] add ink! constructor visibility getter unit test
      
      * [lang/macro] fix unit test for ink! message visibility
      
      * [lang/macro] add many unit tests for ink! constructor TryFrom impl
      
      * [lang/macro] extend success TryFrom impl unit tests
      
      * [lang/macro] factor out sanitize_attributes for TryFrom impls
      
      * [lang/macro] remove salt from messages and constructors
      
      * [lang/macro] add salt extraction for ink! impl block
      
      * [lang/macro] add unit test for ink! impl block salt
      
      * [lang/macro] implement InkAttribute::{salt, selector} getters
      
      * [lang/macro] make use of InkAttribute::salt in TryFrom for ir2::ImplBlock
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] implement InkAttribute::is_payable
      
      * [lang/macro] make use of InkAttribute::{is_payable, selector}
      
      * [lang/macro] add module doc to callable.rs
      
      * [lang/macro] rename ImplBlock -> ItemImpl
      
      * [lang/macro] rename impl_block module to item_impl
      
      * [lang/macro] rename ImplBlockItem -> ImplItem
      
      * [lang/macro] add {Message, Constructor}::is_payable
      
      * [lang/macro] add doc note to ir2::ImplItem
      
      * [lang/macro] add implementation for InputsIter
      
      * [lang/macro] make use of InputsIter in ink! message and constructor
      
      * [lang/macro] add getter for the return type of an ink! message
      
      * [lang/macro] add unit test for ink! message is_payable
      
      * [lang/macro] add unit test for Constructor::is_payable
      
      * [lang/macro] rewrite receiver_works unit test for ink! message
      
      * [lang/macro] add unit test for ink! message inputs
      
      * [lang/macro] add unit test for ink! message output getter
      
      * [lang/macro] add identifier getter to ink! message and constructor
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] implement clippy suggestions
      
      * [lang/macro] add unit test for Constructor::inputs
      
      * [lang/macro] refactor Storage::is_ink_storage
      
      * [lang/macro] add Event::is_ink_event
      
      * [lang/macro] add InkItem::is_ink_item
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] fix many non-dead-code warnings and allow dead-code for ir2
      
      * [lang/macro] implement Contract::config getter
      
      * [lang/macro] allow compile failure of some in-doc tests
      
      * [lang/macro] implement TryFrom for ir2::Module
      
      * [lang/macro] re-export ImplItem from ir2
      
      * [lang/macro] implement visibility check for ink! impl blocks
      
      * [lang/macro] fix unit test
      
      * [lang/macro] improve error message for visibility check
      
      * [lang/macro] add unit test for visibility failure
      
      * [lang/macro] apply rustfmt
      
      * [lang/macro] introduce Callable trait to unify ink! messages and constructors
      
      * [lang/macro] craft initial skeleton of compose_selector function
      
      * [lang/macro] implement ItemImpl::{self_type, trait_path, salt}
      
      * [lang/macro] extend compose_selector docs with a usage recommendation section
      
      * [lang/macro] implement initial version of compose_selector
      
      * [lang/macro] apply clippy suggestion
      
      * [lang/macro] fix some bugs in compose_selector implementation
      
      * [lang/macro] add unit tests for compose_selector
      
      * [lang/macro] rename ir2::Module -> ir2::ItemMod (syn)
      
      * [lang/macro] rename module.rs -> item_mod.rs
      
      * [lang/macro] remove some imports, use names directly
      
      * [lang/macro] rename Event::ast -> item
      
      * [lang/macro] refactor event fields iterator
      
      * rebase resolve conflict
      
      * [lang/macro] move ir2 and ast modules to new crate
      
      * [lang/ir] some general renamings after crate move
      
      * [lang/macro] no longer refer to ast and ir2 modules
      
      * [lang/macro] get rid of all bail! and bail_span! macro calls
      
      They hide significant control flow which is bad for readability.
      
      * [lang/ir] export error macros
      
      * [lang/ir] remove unused import
      
      * [lang/macro] make use of new ink_lang_ir crate
      
      * [lang/ir] improve documentation and module structure
      
      * [lang/ir] apply clippy suggestions + formatting
      
      * [lang/macro] apply clippy suggestions
      
      * [lang/ir] further improvements to the documentation
      
      * [lang/ir] fix error macro docs
      
      * [lang/ir] add missing re-export for ir::Contract
      
      * [lang/ir] improve ir::Contract docs
      
      * [lang/ir] minor refactor of ir::Contract
      
      * [lang/ir] extend docs for ir::Contract
      
      * [lang/ir] make ast::AttributeArgs::args field private
      
      * [lang/ir] apply rustfmt
      
      * [lang/ir] improve docs
      
      * [lang/ir] further documentation improvements
      
      * [lang/ir] add missing exports
      
      * [lang/ir] adjust format_err to require its expr to be T:Spanned
      
      Formerly this was T:ToTokens which is more restrictive than it should have been.
      
      * [lang/ir] refactor format_err_span and format_err macros + docs
      
      * [lang/ir] rename format_err macro -> format_err_spanned
      
      * [lang/ir] rename format_err_span macro -> format_err
      
      * [lang/ir] apply rustfmt
      
      * [lang/ir] minor improvements to format_err{_spanned}
      
      * [lang/ir] implement ToTokens for all ink! IR structures
      
      This is useful because T:ToTokens automatically implements syn::spanned::Spanned while being simpler to implement than syn::spanned::Spanned.
      
      * [lang/ir] add links to tracking issue for format_err{_spanned}
      
      * [lang/ir] minor docs improvements
      
      * [lang/ir] do not re-export everything that belongs to attributes
      
      * [lang/ir] fix compilation in test mode
      
      * [lang/ir] add ir::ItemMod checks for ink! storage, message and constructor quantities
      
      * [lang/ir] make ast module private and move ir module to root
      
      * [lang/ir] rename IterItemImpls -> IterItemImpls
      
      * [lang/ir] remove ir::EnvTypes from public API
      
      * [lang/ir] rename ir::ItemMod::impl_blocks -> item_impls
      
      * [lang/ir] rename ir::Module::item_impls -> impls
      
      * [lang/ir] make ir::Config::env_types return syn::Path
      
      * [lang/ir] move mod doc to lib doc
      
      * [lang/ir] fix event doc test
      
      * [lang/ir] make Event::is_ink_event module private
      
      * [lang/ir] apply rustfmt
      
      * [lang/ir] fix Storage doc test
      
      * [lang/ir] remove unnecessary rust annotation for doc test
      
      * [lang/ir] fix doc tests for constructor and message
      
      * [lang/ir] fix fmt todo! avoidance
      
      * [lang/ir] remove unneded let binding
      
      * [lang/ir] fix doc tests of impl_item/mod.rs
      
      * [lang/ir] make ItemImpl::is_ink_impl_block module private
      
      * [lang/ir] re-export InputsIter
      
      * [lang/ir] add getter for ir::ItemImpl::items
      
      * [lang/ir] rename salt -> namespace
      
      * add doc link in MetaNameValue doc
      Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
      
      * [lang/ir] rename Callable::selector -> user_provided_selector
      
      This is going to avoid confusion with composed selector concept.
      
      * [lang/ir] make Storage::is_ink_storage module private
      
      * [lang/ir] fix doc link
      
      * [lang/ir] expose composed selector through messages and constructors iter
      
      * [lang/ir] apply rustfmt
      
      * [lang/ir] fix item_mod.rs doc tests
      
      * [lang/ir] ignore contract doc test for now
      
      It is hard to test because of the unknown ink::contract attribute at the top.
      
      * [lang/ir] add item getter to CallableWithSelector
      
      * [lang/ir] add Callable::statements getter
      
      * [lang/ir] add ir::ItemMod::ensure_no_overlapping_selectors + tests
      
      * [lang/ir] remove duplicate code
      
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * [lang/ir] move config.rs -> attr_args.rs
      
      * [lang/ir] update doc comments
      
      * [lang/ir] some more doc polishing
      
      * [lang/ir] fix outdated doc comment
      
      * [lang/ir] remove outdated doc comment
      
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * [lang/ir] remove unneeded let binding in doc test
      
      * [lang/ir] fix conflicting constructor attribute closure
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * [lang/ir] fix doc comment
      
      * [lang/ir] remove outdated doc comment
      
      * fix doc comment
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      
      * [lang/ir] rename 'outer label to 'repeat
      
      * [ci] add lang/ir to ALL_CRATES
      
      * [lang/ir] update blake2 dependency from 0.8 -> 0.9
      
      * [lang/macro] remove unneeded blake2 dependency
      
      * [lang/ir] take last segment of trait path
      
      * [lang/ir] slightly improve overlapping selector error message
      
      * [lang/ir] improve overlapping selector formatting
      
      * [lang/ir] add unit test for composed selector with relative trait path
      
      * [lang/ir] improve unit test for relative trait path composed selector
      
      * [lang/ir] fix bug that namespace was a valid attribute on ink! messages
      
      * [lang/ir] add unit test to check against conflicting attributes on ink! messages
      
      * [lang/ir] fix bug that namespace was an allowed attribute for ink! constructors
      
      * [lang/ir] add unit test to check against conflicting ink! constructor attributes
      
      * [lang/ir] add success tests for ir::ItemMod TryFrom
      
      * [lang/ir] fix out-of-line ink! module error message
      
      * [lang/ir] add a bunch of ink! module TryFrom failure unit tests
      
      * [lang/ir] add unit test for ink! event fields iterator
      
      * [lang/ir] apply rustfmt
      Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      c24f0ff9