• Hero Bird's avatar
    Implementation of ink! syntax 2.0 (#191) · b4de2e62
    Hero Bird authored
    
    
    * [lang2] initial commit of ink! lang2 frontend
    
    This is going to be the frontend for the new ink! syntax.
    
    * [lang2] change version syntax to semantic versioning string
    
    * [lang2] add failure test for invalid semantic version string
    
    * [lang2] fix some unused warnings
    
    * [lang2] change lib name to ink_lang2
    
    * [lang2] add span to ir::data::ItemStorage
    
    * [lang2] modernize env types codegen
    
    * [lang2] re-introduce entry points codegen but without body for now
    
    * [lang2] add initial storage struct codegen
    
    * [lang2] add lang2 flipper contract example for testing purposes
    
    * [core] impl env2::EnvTypes for DefaultSrmlTypes instead of old env::EnvTypes
    
    * [lang2] add `0` body to entry points
    
    * [lang2] mark fn allocate_using impl for storage struct as unsafe
    
    * [lagn2] ignore args in Initialize::initialize impl for storage struct
    
    * [lang2] adjust compiletests
    
    * [core] add emit_event to EnvAccess{Mut}
    
    * [lang2] add codegen for contract functions
    
    * [lang2] add Signature::inputs
    
    * [lang2] adjust and modernize compiletests
    
    * [lang2] apply rustfmt
    
    * [core] add generic Encode param to EmitEventParams
    
    * [cli] bump version 0.1.1 -> 0.1.2
    
    * [core] make it possible to use EnvAccess{Mut} directly in storage
    
    * [core] make Selector::{from_bytes, to_bytes} const fn
    
    * [core] add check to Decode impl for CallData
    
    * [core] add #[inline..] annotations to some public trait impls
    
    * [lang2] move lang2 into lang2_macro and create new lang2 helper crate
    
    * [examples] add initial core/flipper example that acts as codegen prototype
    
    * [core] add some more #[inline..] annotations
    
    * [lang2] split DerefEnv into AccessEnv{Mut} and losen direct trait bounds
    
    * [core] add efficient conversion from DynEnv<EnvAccessMut> to DynEnv<EnvAccess>
    
    * [examples] adjust core::Flipper prototype to newest state
    
    * [core] add env accessors to DynEnv
    
    * [lang2] add AccessEnv{Mut} impls for DynEnv and EnvAccess{Mut}
    
    * [lang2] use double AccessEnv trait indirection in dispatch fns
    
    * [examples] core::flipper: add ink-dyn-alloc crate feature
    
    Enable this to enable dynamic storage allocation for your contract.
    Dynamic storage allocation is an optional drop-in feature.
    
    * [lang2] make LICENSE and README.md sym links
    
    * [lang2-macro] replace LICENSE and README.md with sym links
    
    * [lang2] add access_env sub module
    
    * [lang2] simplify Message trait concept for constructors
    
    * [lang2] add more general error codes
    
    * [lang2] add storage sub module
    
    * [lang2] remove old dispatch sub module
    
    * [lang2] implement new dispatcher based on ink_model v2
    
    * [examples] adjust core flipper example for new codegen
    
    * [lang2] remove some commented out code
    
    * [lang2] rename dispatch2 to dispatch_using_mode
    
    * [lang2] fix doc link in DispatchMode docs
    
    * [examples] adjust core::Flipper to better reflect codegen prototype
    
    * [lang2] rename ContractDispatch to DispatchUsingMode and add docs
    
    * [lang2] remove unused ContractInstance trait
    
    * [lang2] remove unneeded Msg and Constr utility types
    
    Those types should solely be provided by the contracts themselves.
    They act as namespaces for the respective message type.
    
    * [lang2/macro] add GenerateCodeUsing trait
    
    * [example] add explanation docs to the Flipper::get(&mut self) method
    
    * [lang2] fix unused warning
    
    * [lang2/macro] refactor codegen module
    
    * [lang2/macro] remove commented-out code
    
    * [core] add EnvAccess to allow universal usage of EnvAccess
    
    * [lang2] no longer require separate storage structs
    
    * [examples] adjust core/Flipper to newest ink_lang2 and ink_core changes
    
    * [examples] remove as much direct Flipper usages as possible
    
    * [lang2/macro] temporarily disable dispatch codegen
    
    * [lang2/macro] add MetaInfo::is_dynamic_allocation_enabled stub
    
    * [lang2/macro] implement initial storage codegen
    
    * [core] remove DynEnvAccess and DynEnvAccessMut
    
    No longer needed!
    
    * [core] implement AccessEnv for &'a {mut} DynEnv<EnvAccess{Mut}>
    
    * [examples] fix implementation of ink_lang2::AccesEnv for StorageAndEnv
    
    * [examples] fix ink_core::env2::AccessEnv impl for StorageAndEnv
    
    * [examples] move deploy and call fns into dispatch const block
    
    * [examples] convert docs to comments because they screw up cargo expand
    
    * [lang2/macro] remove ink_model dependency
    
    * [lang2] fix some minor warnings and issues
    
    * [lang2/macro] fix codegen of ink_core::env2::AccessEnv impls
    
    * [lang2/macro] refactor and improve FunctionSelector implementation
    
    * [lang2/macro] Signature::inputs now returns an iterator over IdentType
    
    Was returning an iterator over FnArg before but conversion is trivial.
    
    * [lang2/macro] add dispatch codegen
    
    * [examples] fix DefaultSrmlTypes usage in lang2/Flipper
    
    * [core] prepare env2 to be used with ABI generation purposes
    
    * [examples] add ABI generation to core/Flipper
    
    This will serve as a prototype for ink_lang2 codegen.
    
    * [core, model] remove unneeded warnings/lints
    
    * [lang2] make calls to AccessEnv and Flush more explicit
    
    * [lang2/macro] no longer use no-default-features for dev-dependencies
    
    * [lang2/macro] surpress warnings of unused imports for core::env2::AccessEnv
    
    * [lang2/macro] fix codegen of {ink_lang2/core::env2}::AccessEnv impls
    
    * [lang2/macro] remove unused let binding (was commented out anyways)
    
    * [lang2/macro] fix several codegen bugs
    
    * [examples] remove ink_model and ink_lang dependencies of lang2/Flipper
    
    * [examples] add contract and layout bindings type annotation
    
    * [lang2/macro] adjust some passing tests
    
    * [lang2] add GenerateAbi trait guarded by ink-generate-abi crate feature
    
    * [lang2/macro] move scale dependency away from ink dependencies in Cargo.toml
    
    * [lang2/macro] add Metadata and HasLayout derives to storage structs
    
    * [lang2/macro] insert minor whitespace between bindings and quote
    
    * [lang2/macro] add abi module to generate ABI generating code
    
    * [lang2/macro] add Function::{filter_constructor, filter_message}
    
    * [lang2/macro] fix bug that non-ink! filter for attributes was off
    
    * [lang2/macro] make use of iterative array quoting in Dispatch codegen
    
    * [lang2/macro] add utility to filter doc attributes and parse them to readable string
    
    * [lang2/macro] add codegen for ABI generation
    
    * [example] adjust lang2/Flipper abi-gen package
    
    * [lang2/macro] ink::contract params adjustments
    
    - make `env` param default to ink_core::env2::DefaultSrmlTypes
    - add `dynamic_allocations = {true|false}`, default: false
    - add `compile_as_dependency = {true|false}`, default: false
    
    * [lang2/macro] adjust passing tests to new contract params
    
    * [examples] adjust lang2/Flipper to new contract params
    
    We enable dynamic_allocations for now since disabling it causes other errors.
    
    * [lang2/macro] add different HasLayout impl for dynamic_allocations {true|false}
    
    * [examples] lang2/Flipper no longer requires dynamic_allocations = true
    
    * [lang2] rename AccessEnv::env to AccessEnv::access_env
    
    This helps to disambiguate certain other `env` methods and trait impls
    
    * [examples] adjust core/Flipper example
    
    * [core] refactor event emitting interfaces in env2
    
    * [examples] core/Flipper: fix env types aliases
    
    * [examples] core/Flipper: adjust to new event emitting
    
    Also:
    - messages and constructors no longer can access private fields from StorageAndEnv
    - rename __ink_storage to __ink_private
    - add __ink_events module in __ink_private defining all events and utilities
    - general rust formatting
    
    * [core] add EmitEvent utility trait
    
    This allow to disambiguate the contract's provided EmitEvent trait
    
    * [examples] core/Flipper: make it impossible to ambiguate emitting of events
    
    * [lang2/macro] rename contract_module.rs to contract.rs
    
    * [lang2/macro] generated messages and constructors can no longer access internals of StorageAndEnv
    
    * [lang2/macro] apply rustfmt
    
    * [lang2/macro] add event codegen
    
    - ABI generation codegen for events is still missing
    
    * [lang2/macro] adjust some pass UI tests to new event codegen
    
    * [lang2/macro] re-export the contract on crate root again
    
    This is done for ABI creation since otherwise the abi-gen tool couldn't access the data.
    
    * [lang2/macro] add ABI generation for events
    
    * [lang2/macro] add Erc721 UI pass test
    
    * [lang2/macro] add missing codegen for ABI event args docs
    
    * [lang2/macro] fix a bug that ABI codegen would always impl GenerateAbi for Flipper
    
    * [lang2/macro] add derive(Metadata) to Error enum for Erc721 test
    
    * [core] add missing Initialize::default_value impls
    
    * [core] add Debug impls for some env types
    
    * [examples] core/Flipper: add code to allow for offchain testability
    
    * [examples] core/Flipper: add error handling for test env init
    
    * [lang2/macro] add docs to ABI generation of event args
    
    * [examples] core/Flipper: adjust to improve testability
    
    - No longer requires <Flipper as Testable>::constructor
    - packs whole of flipper contract in associated flipper module such as what ink_lang2 does
    
    * [lang2/macro] add filter_ink_attributes and has_ink_attributes to utilities
    
    * [lang2/macro] re-export utils from ir
    
    * [lang2/macro] add ir::utils::is_ink_attribute
    
    * [lang2/macro] allow non-ink! items in the contract module
    
    * [lang2/macro] add test for non-ink! module items
    
    * [lang2/macro] apply rustfmt on UI tests
    
    * [lang2/macro] fix 02 ui fail test
    
    * [lang2/macro] generate code for non-ink! module items
    
    * [lang2/macro] move utilities inside the contract module - because we can!!
    
    * [lang2/macro] adjust compile tests for most recent changes
    
    * [lang2/macro] add compile test for missing messages
    
    * [lang2/macro] fix some minor warnings
    
    * [lang2/macro] add a lint to check if all identifiers respect not starting with __ink
    
    * [lang2/macro] add simple test for __ink starting identifiers lint
    
    * [lang2/macro] update docs of idents_respect_pred
    
    * [lang2] apply rustfmt
    
    * [core] apply rustfmt to env2 module
    
    * [lang2/macro] add ir::utils::filter_non_ink_attributes
    
    * [lang2/macro] make use or ir::utils::filter_non_ink_attributes
    
    * [lang2/macro] re-export contract on crate root only for ABI generation
    
    * [lang2/macro] documented code generation principles
    
    * [examples] add Erc20 token example for lang2
    
    * [lang2/macro] refactor event codegen
    
    * [lang2/macro] move dispatch codegen into __ink_private
    
    This hides `Msg` and `Constr` namespaces into __ink_private.
    
    * [lang2/macro] move ABI generation codegen into __ink_private
    
    * [lang2/macro] add test to forbig accessing generated storage fields
    
    * [lang2/macro] extend test to forbig accessing generated storage fields
    
    * [lang2] implement testable contracts codegen
    
    * [lang2/macro] do not generate dispatch code for tests or if `test-env` is enabled
    
    * [examples] lang2/Flipper: add contract tests
    
    * [lang2/macro] add simple tests to flipper test
    
    * [examples] remove core/Flipper example again
    
    This was decided after we felt that maintaining it was more of a burden than it being a help for further development.
    
    * [lang2/macro] apply rustfmt
    
    * [core] refactor env2 cross-calling infrastructure
    
    * [core] move seals into utils
    
    * [examples] lang2/Flipper: add default_works test
    
    * [lang2/macro] add cross-contract calling
    
    * [lang2/macro] add cross-contract calling test
    
    * [lang2] remove CreateForwarder infrastructure since unneeded
    
    * [lang2/macro] do not generate code for Events when compiled as dependency
    
    * [lang2/macro] remove strange semi-comments in Msg and Constr
    
    * [lang2/macro] add Debug derive to StorageAsDependency
    
    * [examples] add Delegator contract based on ink_lang2
    
    * [core] guard calling CreateBuilder::using_code at compile-time
    
    * [lang2] fix some clippy warnings
    
    * [chores] update README
    
    * [lang2/macro] refactor into_hir: use ir types through ir module
    
    * fix typo
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * fix typo in lang2/macro/src/ir/into_hir.rs
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * fix typo in examples/lang2/delegator/adder/lib.rs
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * fix typo in lang2/macro/src/codegen/cross_calling.rs
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * fix typo in core/src/env2/traits.rs
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * fix typo in lang2/macro/src/codegen/contract.rs
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * [lang2/macro] improve some ink! error messages
    
    * [lang2/macro] remove commented-out code
    
    * fix typo in lang2/macro/src/codegen/dispatch.rs
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * [lang2/macro] remove ancient Cargo.toml artifacts
    
    * [examples] fix typo and enhance delegator docs a bit
    
    * use `#!/usr/bin/env` instead of `#!/bin/bash`
    
    Co-Authored-By: default avatarMichael Müller <[email protected]>
    
    * [lang2] apply rustfmt
    
    * [core] env2: apply rustfmt
    
    * [cli] adjust CLI to generate ink_lang2 contract upon new command
    
    * [lang2/macro] generate some #[inline] annotations on some generated cross-calling interfaces
    
    * [examples] improve Delegator example slightly
    
    * [core] fix bug that SrmlEnv tried to impl traits for TestEnv
    
    * [examples] fix bug that .ink/abi_gen was using incorrect crate features
    
    * [cli,examples] fix all abi_gen/Cargo.toml files
    
    * [examples] fix bugs in some examples
    
    * [lang2/macro] suppress some unused_parens warnings
    
    * [examples] add incrementer as lang2 example
    
    * [lang2/macro] make codegen more precise when using traits
    
    * [lang2/macro] "fix" a bug in cross-calling codegen
    
    The fix is actually a hack that we should remove again as soon as possible by a proper solution.
    
    * [core] rename ext_create to ext_instantiate
    
    * [examples] lang2/Delegator: fix some warnings and added Delegator::get
    
    * [examples] lang2/Erc20: add Erc20::allowance
    
    * [core] fix bug in executing ext::scratch_read causing panic
    
    * [core] remove unused println statements in tests
    
    * [examples] delegator: minor improvements
    b4de2e62
This project manages its dependencies using Cargo. Learn more