1. 28 Sep, 2020 1 commit
    • Hero Bird's avatar
      Implement trait support - Part 2/3 - New ink! codegen (#470) · 5d7d855c
      Hero Bird authored
      * [lang/codegen] initial impl of the new ink! codegen
      This new codegen is based on the (also) new ink! IR.
      * [lang/macro] apply rustfmt to imports
      * [lang/codegen] apply rustfmt
      * [lang/ir] add ItemMod::{attrs, vis} getters
      * [lang/codegen] make use of ir::ItemMod::{attrs, vis} in codegen
      * [lang/codegen] restructure ink_lang_codegen library
      * [lang/codegen] appliy clippy suggestion
      * [lang/ir] add Event::attrs() and ToTokens impl for EventField
      * [lang/codegen] apply rustfmt
      * [lang/codegen] implement Event code generator
      * [lang/codegen] make use of the new Events code generator
      * [lang/ir] make ir::Callable always Copy and Clone
      * [lang/ir] rename CallableWithSelector::item -> callable
      * [lang/ir] add Callable::kind() trait method
      * [lang/codegen] add dispatch enum code generation
      * [lang/codegen] enable dispatch code generator
      * [lang/codegen] add generation for constructor dispatch enum
      * [lang/codegen] implement contract entry points
      * [lang/codegen] implement code generation for DispatchUsingMode impl
      * [lang/codegen] add trait impl namespaces Msg<S> and Constr<S>
      * [lang/ir] add ir::Message::inputs_span() getter
      * [lang/codegen] add codegen for dispatch trait impls for ink! messages
      * [lang/codegen] plug-in dispatch trait impls code gen
      * [lang/ir] add Callable::inputs_span trait method
      * [lang/codegen] implement dispatch trait impl codegen for ink! constructors
      Also this implementation avoids a lot of code duplication with the similar code generation for dispatch trait impl of ink! messages.
      * [lang/codegen] make generate_input_bindings doc tests pass
      * [lang/ir] apply rustfmt
      * [lang/codegen] fix message and constructor namespaces
      * [lang/ir] add {Message, Constructor}::attrs getter
      * [lang/codegen] implement codegen for ink! ItemImpls
      * [lang/codegen] remove some unneeded imports for ItemImpl codegen
      * [lang/codegen] automatically import ink_lang's Env, EmitEvent and StaticEnv traits
      * [lang/codegen] do not generate for ink-as-dependency
      * [lang/codegen] initial impl for cross-calling codegen
      Not complete, yet. Also we stubled upon the fact that due to the
      additional Rust trait support we have to completely change how we
      generate code for cross-calling. Research!
      * [core] rename utils.rs -> selector.rs
      * [core] add common mod for common abstractions for call and create
      * [core] improve ExecutionInput: add useful trait impls
      * [core] refactor call builder
      * [core] adjust rest of ink_core to changed imports
      * [core] implement new CreateBuilder
      * [core] remove old InstantiateBuilder
      * [core] remove no longer needed traits
      * [core] add eval,invoke,eval_params,invoke_params to CallBuilder
      This makes both CallBuilder and CreateBuilder more similar to each other.
      * [core] apply rustfmt
      * [core] adjust environment to new CreateBuilder
      * [core] apply rustfmt
      * [core] move eval and invoke to CallParams
      * [core] adjust on-chain impl for CallBuilder
      * [core] add explanation for the cfg
      * [core] move instantiate to CreateParams
      * [core] make CreateParams getters crate private
      * [core] rename Call -> CallParams
      * [core] improve doc comment
      * [lang] adjust lang for new call and create builders
      * [core] expose builder construction through build_call and build_create
      * [core] remove Default impl for empty ExecutionInput
      * [core] add usage examples to build_call
      * [core] improve usage doc example of build_call
      * [core] improve doc tests for build_call
      * [core] add doc test example to build_create
      * [core] fix compilation after merge
      * [metadata] make constuctor and message name an array and add is_payable
      Only messages need is_payable field since constructors must always be payable.
      * [lang/codegen] add metadata code generation
      * [lang/ir] implement lint to ensure there are no __ink_ prefixed identifiers
      Identifiers starting with __ink_ may only be used by the ink! codegen.
      So far this has been only implemented on TokenTree or TokenStream level and not on parsed syn abstractions leading to arcane errors. E.g. it was possible to catch errors if an __ink_ substring appeared in a string literal before.
      * [metadata] make serialized Layout fields camelCase
      * [lang/ir, lang/macro] apply rustfmt
      * [lang/ir] initial implementation of #[ink::trait_definition] proc. macro
      * [lang/ir] re-export InkTrait
      * [lang/macro] create new proc. macro for ink! trait definitions
      * [lang/ir] improve error messages of #[ink::trat_definition] a bit
      * [lang/ir] add many more unit tests
      * [lang/ir] apply rustfmt
      * [lang/ir] fixed spelling bug
      * [lang/ir] fix handling or errorneous Self receiver in ink! constructors
      * [lang/ir] add bunch of new unit tests for #[ink::trait_definition] proc. macro
      * [lang/ir] add some more unit tests
      * [lang/ir] implement checks for invalid ink! attributes
      * [lang/ir] add unit tests for invalid ink! attributes
      * [lang/ir] use syn's builtin receiver getter
      * [lang/ir] add iterators for ink! trait definition
      * [lang/ir] add getters for generic info of ink! trait definition
      * [lang/ir] fix a unit test testing too much
      * [lang/ir] deny ink! trait definitions with supertraits
      We might add support for supertraits in future versions.
      * [lang/ir] add verify_hash functions
      * [lang/ir] simplify ink! trait verification hash
      There now is only a single hash instead of a hash per constructor and message.
      * [lang/ir] add InkTrait::attrs() getter
      * [lang/ir] add re-exports for most InkTrait types
      * [lang/codegen] initial implementation of #[ink::trait_definition] codegen
      Does not yet include the verification hash generation.
      * [lang/codegen] refine codegen for ink! trait definitions
      * [lang, lang/codegen] use correct trait for ink! trait definition checking
      * [lang/codegen] rework crate exposed API
      * [lang/ir] fix return value of ir::InkTrait::new
      * [lang/macro] update codegen driver for ink! trait definition
      * [core, lang/codegen, lang/ir, metadata] apply clippy suggestions
      * [lang/codegen, lang/ir, lang/macro, lang] apply rustfmt
      * [lang/macro] add ink_lang_codegen dependency
      Needed for #[ink::trait_definition] proc. macro.
      * [core/derive] use _ as const name instead of generated one
      * [lang/codegen] prefix {Constructo,Message}DispatchEnum ident with __ink_
      * [lang/codegen] use payable instead of is_payable
      * [lang/codegen] hide some generated types
      * [lang/ir] improve error span of bad storage struct visibility
      * [core] add CallBuilder::returns to signal return type
      Also this adds CallBuilder::fire as a quick way to fire off the call.
      The CallBuilder::invoke_params and CallBuilder::eval_params are no longer needed and thus removed.
      * [lang/ir] implement ToTokens for ir::Receiver
      * [lang/codegen] apply #[doc(hidden)] to generated call forwarders
      * [lang/codegen] slightly clean-up code
      * [lang/codegen] use new call infrastructure for call forwarders
      * [lang/codegen] add codegen for short-hand cross-contract message calls
      * [lang/codegen] add #[inline] to generated short-hand message calls
      * [lang/codegen] improve short-hand call error message
      * [lang/codegen] do not generate conflicting impls
      * [lang/codegen] generate non-ink! specific user defined items
      * [lang/ir] remove some commented out code
      * [core, lang/ir] apply rustfmt
      * [core] add CreateBuilder::instantiate
      * [lang/codegen] fix generate_arg_list
      * [lang/codegen] add cross-calling codegen for non-trait constructor impls
      * [lang/codegen] add an associated type per trait constructor in ink! trait definition
      * [lang/codegen] remove former Output associated type in ink! trait definition
      * [lang] re-export trait_definiction proc. macro from ink_lang crate
      * [lang/ir] expose InkTrait::compute_verify_hash
      * [lang/ir] add ir::ItemImpl::trait_ident
      * [lang/codegen] fix some bugs with trait_definition codegen
      * [lang/codegen] add codegen for cross-calling ink! trait implementations
      * [lang/codegen] surpress warning in generated code
      * [lang/codegen] fix bug in generated trait constructors
      * [lang/codegen] add codegen for trait implementation blocks
      * [lang/ir] allow access to parent impl block from within a CallableWithSelector
      * [lang/codegen] make dispatch trait impls more explicit for trait impls
      * [lang/codegen] fix and fully implement cross-calling (trait) impl blocks
      Works now for both trait impl blocks as well as inherent impl blocks.
      Only missing piece now is the codegen for the call forwarders and their impl blocks.
      * [lang/ir] add ir::ItemImpl::attrs getter
      * [lang/codegen] add codegen for impl block attributes for cross-calling
      * [lang/codegen] correctly re-generate attributes for impl blocks
      * [lang/codegen] generate forwarder inherent impl blocks
      * [lang, lang/codegen] adjust ink::trait_definition proc. macro codegen
      Now it also generates an associated return type per message.
      Those have to respect the ink_lang::ImpliesReturn trait.
      * [lang/codegen] add cross-calling call forwarder codegen for trait impl blocks
      * [lang] add NeverReturns utility codegen type
      * [lang/codegen] implement codegen for cross-calling trait impl blocks
      * [*] apply rustfmt
      * [lang/codegen] apply some clippy suggestions
      * [lang/codegen] always use std feature for itertools dependency
      Otherwise codegen won't work for Wasm32 compilations.
      * [lang/ir] fix error span for bad event visibility modifier
      * [lang/ir, lang/codegen] fix event fields codegen
      * [lang/codegen] fix incorrectly generated EmitEvent trait impl
      * [lang/codegen] fix bugs with ink-as-dependency and event usage
      * [lang, lang/codegen] add ContractEnv trait
      Used to query EnvTypes trait impl using the ink! storage struct.
      * [lang, lang/codegen] implement payable messages and dynamic storage alloc
      Now it is possible to control whether to use the dynamic storage allocator provided by ink! in ink! itself.
      Also this PR implements codegen for non-payable messages.
      * [lang/macro, lang/codegen] apply rustfmt
      * [lang/ir] error upon payable constructor
      ink! constructors are payable by default.
      * [core] remove EnvTypes::Call associated type
      No longer needed since we just removed the ability to directly call the runtime.
      * [core] add MAX_EVENT_TOPICS to EnvTypes trait
      * [lang, lang/codegen] optimize message payment checks codegen
      * [lang/ir, lang/codegen] dynamic storage allocator: rename + change default
      New default is set to "false" so only contracts that actually use this feature need to specify it.
      Also renamed to dynamic_storage_allocator to better carry intention.
      * [lang, lang/codegen] add codegen to guard against too many event topics
      * [lang/codegen] pull topic guards codegen out of topics impl codegen const
      * [lang/codegen] split event topic guards into their own method
      * [lang] apply rustftm
      * [lang/ir] remove unnecessary lifetime
      * [lang] make use of deny_payment internally
      * [lang/macro] ignore UI compile tests for now
      These will be re-enabled for the follow-up PR.
      * [metadata] rename is_payable -> payable (also for metadata format)
      * [lang/ir] resolve duplicate code for non-pub visibility checking
      Was duplicated for events and storage structs.
      * [lang/ir] apply rustfmt
      * [lang/codegen] removed commented-out code and update license header
      * [lang/codegen] update crate description
      * [core] move CreateParams impl blocks closer to struct definition
      * [lang/macro] use US english
      * [core] fix incorrect doc comment
  2. 30 Jun, 2020 1 commit
  3. 13 Jun, 2020 1 commit
    • Hero Bird's avatar
      Make ink! lang use ink_core::storage2 module (#422) · 1e312d1e
      Hero Bird authored
      * [abi] create new layout trait and structures
      * [abi] remove unused import
      * [abi] add missing license header
      * [abi] fix clippy warning
      * [primitives] add KeyPtr to ink_primitives
      * [core] use KeyPtr through ink_primitives and add ExtKeyPtr trait
      * [abi] use KeyPtr of ink_primitives
      * [abi] make EnumLayout use StructLayout
      * [abi] implement custom serde::Serialize for LayoutKey
      * [abi] implement IntoCompact for layout2 module types
      * [abi] add doc comment
      * [abi] apply rustfmt
      * [abi] add unit test for LayoutKey serialization
      * [abi] rename ArrayLayout::array -> new
      * [abi] add dispatch_key field to enum layout
      * [abi] derive From for all Layout variants
      * [abi] add unit tests for the new layout traits and data structures
      * [abi] add experimental CellLayout
      * [abi] make tests work again for layout2
      * [abi] use specialized serializer function for LayoutKey
      * [abi] refactor UnboundedLayout
      * [abi] add unit test for UnboundedLayout
      * [abi] apply rustfmt
      * [core/derive] slightly refactor code
      * [abi] simplify enum test
      * [primitives] derive Debug, Copy and Clone for KeyPtr
      * [abi] simplify CellLayout::new
      * [abi] fix calling incorrect constructor for LayoutKey
      * [abi] move layout2 module file into directory
      * [core] add StorageLayout trait to storage2 module
      * [abi_derive, core_derive] remove unnecessary extern crate proc_macro
      * [core] imply ink-generate-abi feature by std feature
      * [core] derive Metadata for env types for std feature
      * [core] add Key, Hash, AccountId and String StorageLayout impls
      * [core/derive] add initial structure for StorageLayout derive
      * [core] add StorageLayout impls for some more prelude types
      * [core] fix Box<T> impl for StorageLayout trait
      * [core] implement StorageLayout for storage2::{Memory, Pack, LazyArray}
      * [core] fix StorageLayout impl for LazyArray
      * [core] implement StorageLayout for LazyIndexMap
      * [abi] add HashLayout
      * [abi] rewrite UnboundedLayout test to HashLayout test
      * [abi] remove unbounded layout
      * [abi, core] apply rustfmt
      * [core] add initial skeleton for StorageLayout tests
      * [core] add StorageLayout impls for Lazy, LazyCell and LazyHashMap
      * [core] add StorageLayout impls for Option and Result
      * [core] add LayoutCryptoHasher trait
      * [core] fix StorageLayout impl for LazyHashMap
      * [core] apply rustfmt
      * [core] add StorageLayout impl for storage2::Vec
      * [core] add StorageLayout for storage2::SmallVec
      * [core] implement StorageLayout for storage2::Stash
      * [core] implement StorageLayout for storage BitStash, Bitvec and HashMap
      * [core] improve StorageLayout impl for storage2::Vec
      * [core] apply rustfmt
      * [abi] fix clippy warning
      * [core] add StorageLayout impl for storage2::alloc::Box
      * [core] add StorageLayout impl for DynamicAllocator
      * [core/derive] impl StorageLayout derive for struct items
      * [core/derive] make StorageLayout derive work for enum items
      * [core/derive] fix expansion for nested enums
      * [core/derive] fix a bug with nested enums
      * [core/derive] add unit test for MixedEnum
      * [core/derive] apply rustfmt
      * [lang] add revision 2 module
      * [core] remove generic T: EnvTypes param from Dispatch trait
      * [lang] remove unnecessary import
      * [lang] remove unnecessary generic parameter
      * [lang/macro] generate codegen for the new v2 traits
      * [core] re-export SpreadLayout and PackedLayout macros from within ink_core
      * [lang] further adjustments to make ink_lang_macro work with storage2
      * [lang, core] apply rustfmt
      * [lang] fix clippy warning
      * [lang] fix some bugs with constructors without inputs
      * [examples] adjust the Flipper example contract for the changes
      * [lang] remove codegen for testing ink! contracts
      No longer needed.
      * [lang] remove test-env crate feature
      * [lang] minor improvements to EnvAccess utility type
      * [examples] remove unused import for Flipper
      * [examples] remove test-env crate feature for Flipper
      * [lang] remove unused IdentType::span method
      * [examples] Flipper: adjust contract for ink_lang changes
      * [examples] adjust Erc20 for the ink_lang changes
      * [examples] fix some indentation in Cargo.toml
      * [examples] adjust DNS contract for ink_lang changes
      * [examples] adjust ERC721 for ink_lang changes
      There is still a bug that we need to fix in ink_core.
      * [example] adjust lib.rs of ERC721 to ink_lang changes
      * [examples] adjust Delegator example contract for ink_lang changes
      * [lang_macro] generate SpreadLayout and PackedLayout impls for cross-calling wrappers
      * [core] release storage2::Stash::entries() iterator for non-testing API
      * [core] add SpreadLayout and PackedLayout impls for () type
      * [examples] convert multisig contract example to new ink_lang
      * [examples] fix incrementer Cargo.toml indentations
      * [examples] adjust runtime-storage example contract for ink_lang changes
      * [core] apply rustfmt
      * [lang] generate correct attributes for messages
      * [examples] make use of derive(Default) for DNS example
      * [lang_macro] improve some ink! error messages
      * [lang_macro] update all compile tests
      * [examples] multisig: ignore doc test
      This needs serious fixing later! @athei
      * [lang] remove old ink_lang abstractions
      * [lang] remove no longer needed ink_lang modules
      * [lang_macro] add compile test for derive on storage struct
      * [examples] ignore failing doc test
      * [examples] actually ignore the failing doc-test for multi-sig
      * [lang] move v2 module back to origin
      * [lang_macro] adjust codegen for new dispatch module structure of ink_lang
      * [lang_macro] no longer impl ink_core::{Flush, AllocateUsing} for ink! dependencies
      * [lang_macro] use root namespaces in codegen everywhere
      * [lang] apply rustfmt
      * [lang_macro] use only root namespaces in codegen (forgot some)
      * [lang] remove nightly Rust feature usage
      * [core] re-export StorageLayout from ink_core::storage2::traits
      * [lang,abi] adjust ink! metadata generation codegen to new layout
      * [lang] use root namespaces in codegen
      * [examples] apply rustfmt
      * [lang] update cross-calling codegen for new storage layout
      * [examples] update Delegator example contract
      * [examples] apply rustfmt
      * [abi] remove StorageLayout trait from ink_abi crate
      * [examples] apply rustfmt
      * [examples] fix clippy warning
      * [examples] fix multisig_plain contract
      * [examples] apply rustfmt
      * [examples] fix clippy warning
      * [examples] remove commented out code from multisig_plain example
      * [lang] refactor codegen for contract storage struct
      * [lang] fix unused import warning
      * [lang] eliminate CrossCallingConflictCfg
      * [lang] do not generate normal storage struct as dependency
      * [lang] re-introduce cross calling conflict cfg codegen
      * [lang/macro] refactor codegen for cross-calling
      * [lang] add new traits for Event connectors
      * [lang/macro] use connectors API for event codegen
      * [lang/macro] apply rustfmt
      * [lang/macro] remove out-of-ink-module export
      * [abi] fix selector encoding
      * [lang/macro] fix unused warning
      * [examples] adjust example smart contracts for recents ink_lang_macro changes
      * [abi] fix unit test for selector
      * [chores] update README ink! example
      * [alloc] silence warnings of unused unsafe for core::intrinsics::abort
      * [examples] apply rustfmt
      * [lang/macro] fix codegen for `cargo test`
      * [*] replace ink-generate-abi crate feature everywhere with std
      * [examples] fix Cargo.toml for generating metadata
      * [examples] move flipper/src/lib.rs one up
      * [examples] move lib.rs to root folder
      * [examples] fix Cargo.toml of ERC721
      * [examples] apply rustfmt to ERC20
      * [examples] apply rustfmt to ERC721
      * [examples] apply rustfmt to all examples
      * [abi] remove unused serialize_selector function
      * [examples] fix bug that DNS example still used type-metadata crate
      * [example] fix bug in multisig_plain example