compiler: Own union variant construction

c0a02bfa822b4ec395c80a491c620a2f1e58368f950549457b9d23e01877502a
Alexis Sellier committed ago 1 parent 93dfa95d
lib/std/lang/resolver.rad +3 -3
5712 5712
    // do it again.
5713 5713
    if let case NominalType::Union(_) = *nominalTy {
5714 5714
        return;
5715 5715
    }
5716 5716
    let a = alloc::arenaAllocator(self.arena);
5717 -
    let mut variants: *unsafe mut [UnionVariant] = &mut [];
5717 +
    let mut variants: *mut [UnionVariant] = &mut [];
5718 5718
5719 5719
    let markers = try resolveOwnershipMarkers(self, decl.derives);
5720 5720
    set *nominalTy = NominalType::Resolving(node);
5721 5721
5722 5722
    assert decl.variants.len <= MAX_UNION_VARIANTS, "resolveUnionBody: maximum union variants exceeded";
5744 5744
            valueType: variantType,
5745 5745
            symbol: variantSym,
5746 5746
        }, a);
5747 5747
    }
5748 5748
    if markers.copy {
5749 -
        for variant in variants {
5749 +
        for variant in &variants[..] {
5750 5750
            if not isCopy(variant.valueType) {
5751 5751
                throw emitError(self, node, ErrorKind::CopyContainsNonCopy);
5752 5752
            }
5753 5753
        }
5754 5754
    }
5756 5756
5757 5757
    // Update the nominal type with the resolved variants.
5758 5758
    set *nominalTy = NominalType::Union(UnionType {
5759 5759
        regions: self.regionScope,
5760 5760
        application: nil,
5761 -
        variants: &variants[..],
5761 +
        variants: (&variants[..]) as *unsafe [UnionVariant],
5762 5762
        layout: allocLayout(self, info.layout),
5763 5763
        valOffset: info.valOffset,
5764 5764
        isAllVoid: info.isAllVoid,
5765 5765
        declaredLinear: markers.linear,
5766 5766
        declaredCopy: markers.copy,