inline native Julia scalars encountered in f.(args...) AST #18205
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an alternative version of #18202, following a suggestion by @JeffBezanson.
As an optimization, the "dot call" fusion does "inlining" of literal scalars, so that e.g.
f.(x,3)
turns intobroadcast(x -> f(x,3), x)
rather thanbroadcast(f, x, 3)
. This PR expands the range of scalars that are inlined to include JuliaNumber
objects in the AST (and could do the same forString
and some other types once #16966 is fixed … since it is just an optimization, it is okay if we aren't exhaustive).(As was observed in #18176, the parser actually ends up converting things like floating-point literals into Julia objects in the AST, so without this optimization they aren't inlined.)