Merged
Conversation
Previously, when building a release version of the tests, shadow-cljs
defaults to :advanced optimizations. For most apps, the default behavior
is ideal and you get really well optimized code.
Code like `("abcde" nil 1 2)` gets inlined to `"abcde".substring(1,2)`,
but in our tests `(subs nil 1 2)` would get inlined to
`null.substring(1,2)`. Given the Google Closure compiler shadow-cljs
uses, it recognizes that is invalid code and just outputs `null`. This
results in code that is effectively `(thrown? nil)` which raises the
error about receiving nil instead.
This sets the :optimizations to :simple in the release build. While it
still produces decently optimized code, it doesn't factor out our
intentionally invalid calls which is ideal for writing tests.
Contributor
|
Nice! Thanks for tracking this down, @jaidetree. |
Member
|
Great job, @jaidetree! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Previously, when building a release version of the tests, shadow-cljs defaults to :advanced optimizations. For most apps, the default behavior is ideal and you get really well optimized code.
Code like
("abcde" nil 1 2)gets inlined to"abcde".substring(1,2), but in our tests(subs nil 1 2)would get inlined tonull.substring(1,2). Given the Google Closure compiler shadow-cljs uses, it recognizes that is invalid code and just outputsnull. This results in code that is effectively(thrown? nil)which raises the error about receiving nil instead.This sets the :optimizations to :simple in the release build. While it still produces decently optimized code, it doesn't factor out our intentionally invalid calls which is ideal for writing tests.