Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix[lang]: forbid calling __default__ #4371

Open
wants to merge 36 commits into
base: master
Choose a base branch
from

Conversation

sandbubbles
Copy link
Collaborator

@sandbubbles sandbubbles commented Nov 23, 2024

What I did

Forbid calling __default__ by staticcall and extcall. Depends on #4090.
Edit: Added dependency on the PR.

How I did it

In validate functions check the attribute name if present.

How to verify it

Commit message

Commit message for the final, squashed PR. (Optional, but reviewers will appreciate it! Please see our commit message style guide for what we would ideally like to see in a commit message.)

Description for the changelog

Cute Animal Picture

Put a link to a cute animal picture inside the parenthesis-->

charles-cooper and others added 30 commits June 1, 2024 09:30
allow `module.__interface__` to be used in call position by adding it to
the module membership data structure.

additionally, fix a bug where interfaces defined inline could not be
exported. this is simultaneously fixed as a related bug because
previously, interfaces could come up in export analysis as `InterfaceT`
or `TYPE_T` depending on their provenance. this commit fixes the bug by
making them `TYPE_T` in both imported and inlined provenance.

refactor:
- wrap interfaces in TYPE_T
- streamline an `isinstance(t, (VyperType, TYPE_T))` check.
  `TYPE_T` now inherits from `VyperType`, so it doesn't need to be
  listed separately
there was a test for unimplemented `.vyi` interfaces, this commit adds a
test for unimplemented inline interface for completeness
it was only there for `-f abi` output -- since it is a standards
requirement to have the constructor in the abi output, but it doesn't
semantically make sense in-language for the init function to be the
interface, we add it back in later, at abi generation time.

add a test that `module.__interface__(...).__init__()` is not allowed.
also add a test for an exception case that was not tested before
…fix/interface-intrinsic

feat[test]: add tests for intrinsic interfaces
@@ -19,7 +19,7 @@
)
from vyper.semantics.data_locations import DataLocation
from vyper.semantics.types.base import TYPE_T, VyperType, is_type_t
from vyper.semantics.types.function import ContractFunctionT
from vyper.semantics.types.function import ContractFunctionT, MemberFunctionT

Check failure

Code scanning / CodeQL

Module-level cyclic import Error

'ContractFunctionT' may not be defined if module
vyper.semantics.types.function
is imported before module
vyper.semantics.types.module
, as the
definition
of ContractFunctionT occurs after the cyclic
import
of vyper.semantics.types.module.
'ContractFunctionT' may not be defined if module
vyper.semantics.types.function
is imported before module
vyper.semantics.types.module
, as the
definition
of ContractFunctionT occurs after the cyclic
import
of vyper.semantics.types.module.
@@ -19,7 +19,7 @@
)
from vyper.semantics.data_locations import DataLocation
from vyper.semantics.types.base import TYPE_T, VyperType, is_type_t
from vyper.semantics.types.function import ContractFunctionT
from vyper.semantics.types.function import ContractFunctionT, MemberFunctionT

Check failure

Code scanning / CodeQL

Module-level cyclic import Error

'MemberFunctionT' may not be defined if module
vyper.semantics.types.function
is imported before module
vyper.semantics.types.module
, as the
definition
of MemberFunctionT occurs after the cyclic
import
of vyper.semantics.types.module.
'MemberFunctionT' may not be defined if module
vyper.semantics.types.function
is imported before module
vyper.semantics.types.module
, as the
definition
of MemberFunctionT occurs after the cyclic
import
of vyper.semantics.types.module.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants