Skip to content

feat[lang]: allow flag members in pure functions #4693

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

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

Conversation

z80dev
Copy link
Contributor

@z80dev z80dev commented Jun 11, 2025

What I did

Flag members like Action.BUY are compile-time constants and should be allowed in pure functions. This change adds validation logic to detect flag member access and permit them in pure contexts.

How I did it

Changes:

  • Add is_member_access() helper method to FlagT
  • Update semantic analysis to allow flag member access in pure functions
  • Add comprehensive tests covering flag operations in pure functions

How to verify it

Run test suite, or compile a contract like:

flag Action:
    BUY
    SELL
    CANCEL

@pure
@external
def get_buy_action() -> Action:
    return Action.BUY

@pure
@external  
def get_sell_action() -> Action:
    return Action.SELL

@pure
@external
def get_cancel_action() -> Action:
    return Action.CANCEL

Commit message

feat: allow flag member usage in pure functions

Description for the changelog

Allow Flag member usage in pure functions

Cute Animal Picture

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

Flag members like Action.BUY are compile-time constants and should be
allowed in pure functions. This change adds validation logic to detect
flag member access patterns and permit them in pure contexts.

Changes:
- Add is_member_access() helper method to FlagT for cleaner type-specific logic
- Update semantic analysis to allow flag member access in pure functions
- Add comprehensive tests covering flag operations in pure functions
- Remove trailing whitespace from test file
- Shorten comment line to fit within 100 character limit
@z80dev z80dev changed the title feat: allow flag members in pure functions feat[lang]: allow flag members in pure functions Jun 11, 2025
Copy link

codecov bot commented Jun 11, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 92.97%. Comparing base (14a4ca6) to head (b5d7613).
Report is 10 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4693      +/-   ##
==========================================
+ Coverage   92.93%   92.97%   +0.04%     
==========================================
  Files         131      131              
  Lines       19006    19067      +61     
  Branches     3300     3319      +19     
==========================================
+ Hits        17663    17728      +65     
+ Misses        905      902       -3     
+ Partials      438      437       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@charles-cooper charles-cooper added the release - tentative items still being considered for release inclusion label Jun 16, 2025
@cyberthirst
Copy link
Collaborator

looks good, added some more tests, please merge z80dev#2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release - tentative items still being considered for release inclusion
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants