Skip to content

Conversation

BobTheBuidler
Copy link
Contributor

This PR adds ConditionalExpr support to constant_fold_expr

@BobTheBuidler BobTheBuidler changed the title [mypyc] feat: add ConditionalExpr support to constant_fold_expr feat: add ConditionalExpr support to constant_fold_expr [1/1] Oct 2, 2025

This comment has been minimized.

Copy link
Collaborator

@JukkaL JukkaL left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add an irbuild test and a run test?

@BobTheBuidler
Copy link
Contributor Author

Hmm that's weird, it looks like the constant for the base folded correctly, as did the 2 branch values, but not the overall expression

________________________ testConditionalConstantFolding ________________________
[gw3] linux -- Python 3.10.18 /home/runner/work/mypy/mypy/.tox/py/bin/python
data: /home/runner/work/mypy/mypy/mypyc/test-data/irbuild-constant-fold.test:482:
Failed: Invalid source code output (/home/runner/work/mypy/mypy/mypyc/test-data/irbuild-constant-fold.test, line 482)
----------------------------- Captured stderr call -----------------------------
Expected:
  def f():
      a :: str (diff)
  L0:
      a = "t" (diff)
Actual:
  def f():
      r0 :: bit (diff)
      r1, r2, r3, a :: str (diff)
  L0:
      r0 = 2 != 0 (diff)
      if r0 goto L1 else goto L2 :: bool (diff)
  L1: (diff)
      r1 = 't' (diff)
      r2 = r1 (diff)
      goto L3 (diff)
  L2: (diff)
      r3 = 'f' (diff)
      r2 = r3 (diff)
  L3: (diff)
      a = r2 (diff)
      return 1 (diff)

Alignment of first line difference:
  E:     a :: str
  A:     r0 :: bit
         ^

@BobTheBuidler
Copy link
Contributor Author

I mean... I guess it did constant fold all of the necessary values... And I think with the code like this the C compiler can optimize away the if check in some cases (ex: ints), but not all (ex: strings)

This comment has been minimized.

@BobTheBuidler BobTheBuidler marked this pull request as draft October 2, 2025 19:50
@BobTheBuidler
Copy link
Contributor Author

Oh, I know why! Let's put this on hold until #19982 is merged, so I can use the @folding_candidate decorator

@BobTheBuidler BobTheBuidler changed the title feat: add ConditionalExpr support to constant_fold_expr [1/1] feat: add ConditionalExpr support to constant_fold_expr [2/2] Oct 3, 2025
Copy link
Contributor

github-actions bot commented Oct 3, 2025

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

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.

2 participants