Skip to content

Commit

Permalink
Merge pull request vyperlang#1800 from iamdefinitelyahuman/private-fn…
Browse files Browse the repository at this point in the history
…-collisions2

Include private methods when checking function selector collisions
  • Loading branch information
fubuloubu authored Jan 7, 2020
2 parents a391cab + 4fc8917 commit 9e8c661
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
20 changes: 20 additions & 0 deletions tests/signatures/test_method_id_conflicts.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,26 @@ def tgeo():
def OwnerTransferV7b711143(a: uint256):
pass
""",
"""
# check collision between private method IDs
@private
@constant
def gfah(): pass
@private
@constant
def eexo(): pass
""",
"""
# check collision between private and public IDs
@private
@constant
def gfah(): pass
@public
@constant
def eexo(): pass
"""
]


Expand Down
9 changes: 4 additions & 5 deletions vyper/signatures/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,11 +275,10 @@ def find_signature_conflicts(sigs: Sequence[FunctionSignature]) -> Conflicts:


def check_valid_contract_interface(global_ctx, contract_sigs):
public_func_sigs = [
sig for sig in contract_sigs.values()
if isinstance(sig, FunctionSignature) and not sig.private
]
func_conflicts = find_signature_conflicts(public_func_sigs)
# the check for private function collisions is made to prevent future
# breaking changes if we switch to internal calls (@iamdefinitelyahuman)
func_sigs = [sig for sig in contract_sigs.values() if isinstance(sig, FunctionSignature)]
func_conflicts = find_signature_conflicts(func_sigs)

if len(func_conflicts) > 0:
sig_1, sig_2 = func_conflicts[0]
Expand Down

0 comments on commit 9e8c661

Please sign in to comment.