Fix typecheck error on Listing/Mapping (#725)

The addresses the following case:

    local l1: Listing<String> = new { 1 }
    l2: Listing<Int> = (l1) { 2 }

The member in `l1` should be checked against its owner; to check against `Listing<String>`.
This commit is contained in:
Daniel Chao
2024-10-23 14:38:30 -07:00
committed by GitHub
parent ce25cb8ef0
commit 9d10832ffc
9 changed files with 85 additions and 0 deletions

View File

@@ -298,6 +298,9 @@ public final class VmUtils {
}
}
} else if (receiver instanceof VmListingOrMapping<?> vmListingOrMapping) {
if (owner != receiver && owner instanceof VmListingOrMapping<?> vmListingOrMappingOwner) {
ret = vmListingOrMappingOwner.typecastObjectMember(member, ret, callNode);
}
ret = vmListingOrMapping.typecastObjectMember(member, ret, callNode);
}
receiver.setCachedValue(memberKey, ret, member);