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

Backport: Fix isInstanceOf[Array[?]] returning true on non-Array #12108

Commits on Apr 15, 2021

  1. Fix isInstanceOf[Array[?]] returning true on non-Array

    Before this commit, the `MultiArrayOf(elem, ndims)` extractor used to
    strip wildcards from the element type, this was surprising since it does
    not match what the `ArrayOf(elem)` extractor does, and lead to a bug in
    `TypeTestCasts.interceptTypeApply` which contains the following code:
    
    case defn.MultiArrayOf(elem, ndims) if isGenericArrayElement(elem, isScala2 = false) =>
    
    `isGenericArrayElement` returns false for `Any` but true for
    `_ >: Nothing <: Any`, so the stripped wildcard means that this case was
    skipped, resulting in:
        x.isInstanceOf[Array[?]]
    being erased to:
        x.isInstanceOf[Object]
    instead of:
        scala.runtime.ScalaRunTime.isArray(x, 1)
    
    Fixed by tweaking `MultiArrayOf` to keep any final wildcard around like
    `ArrayOf` does.
    smarter committed Apr 15, 2021
    Configuration menu
    Copy the full SHA
    4a384e7 View commit details
    Browse the repository at this point in the history