Skip to content

Commit

Permalink
Explicitly specify the trait in the dispatching (#1131)
Browse files Browse the repository at this point in the history
* Explicitly specify the trait during execution

* Added UI test to verify that traits which are using the same naming of messages doesn't conflict with each other
  • Loading branch information
xgreenx committed Feb 13, 2022
1 parent 88b12d6 commit 67b457c
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
2 changes: 1 addition & 1 deletion crates/lang/codegen/src/generator/dispatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ impl Dispatch<'_> {

const CALLABLE: fn(&mut Self::Storage, Self::Input) -> Self::Output =
|storage, #input_tuple_bindings| {
#storage_ident::#message_ident( storage #( , #input_bindings )* )
<#storage_ident as #trait_path>::#message_ident( storage #( , #input_bindings )* )
};
const SELECTOR: [::core::primitive::u8; 4usize] = #selector;
const PAYABLE: ::core::primitive::bool = #payable;
Expand Down
43 changes: 43 additions & 0 deletions crates/lang/tests/ui/contract/pass/traits-messages-same-name.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use ink_lang as ink;

#[ink::trait_definition]
pub trait TraitDefinition1 {
#[ink(message)]
fn message(&self);
}

#[ink::trait_definition]
pub trait TraitDefinition2 {
#[ink(message)]
fn message(&self);
}

#[ink::contract]
mod contract {
use super::{
TraitDefinition1,
TraitDefinition2,
};

#[ink(storage)]
pub struct Contract {}

impl Contract {
#[ink(constructor)]
pub fn constructor() -> Self {
Self {}
}
}

impl TraitDefinition1 for Contract {
#[ink(message)]
fn message(&self) {}
}

impl TraitDefinition2 for Contract {
#[ink(message)]
fn message(&self) {}
}
}

fn main() {}

0 comments on commit 67b457c

Please sign in to comment.