compiler: Check shared lowerer state initialization

09c34aea681485a2d37574fb0351d7c5ff0c25eebada8dbf9357c855627a331a
Alexis Sellier committed ago 1 parent bc981908
lib/std/lang/lower.rad +13 -14
812 812
    pkgName: *[u8],
813 813
    arena: &mut alloc::Arena
814 814
) -> il::Program throws (LowerError) {
815 815
    let functionArena = (&mut *arena) as *unsafe mut alloc::Arena;
816 816
    let resolved: 'phase = &*res where 'arena: 'phase in {
817 -
        let mut low = Lowerer 'arena 'phase {
818 -
            arena: (&mut *arena) as *unsafe mut alloc::Arena,
819 -
            resolver: resolved,
820 -
            moduleGraph: nil,
821 -
            pkgName,
822 -
            currentMod: nil,
823 -
            data: &mut [],
824 -
            packageDataStart: 0,
825 -
            functions: &mut [],
826 -
            symbolNames: &mut [],
827 -
            errTags: &mut [],
828 -
            errTagCounter: 1,
829 -
            options: LowerOptions { debug: false, buildTest: false },
830 -
        };
817 +
        let mut low = lowererState(resolved, nil, pkgName, functionArena,
818 +
            LowerOptions { debug: false, buildTest: false });
831 819
        try lowerDecls(&mut low, root, true, functionArena);
832 820
833 821
        return finalize(low);
834 822
    }
835 823
}
844 832
    res: &'phase resolver::Resolver 'arena,
845 833
    graph: &'phase module::ModuleGraph,
846 834
    pkgName: *[u8],
847 835
    arena: *unsafe mut alloc::Arena,
848 836
    options: LowerOptions
837 +
) -> Lowerer 'arena 'phase where 'arena: 'phase {
838 +
    return lowererState(res, graph, pkgName, arena, options);
839 +
}
840 +
841 +
/// Initialize lowering state with empty owned collections and borrowed metadata.
842 +
fn lowererState 'arena 'phase (
843 +
    res: &'phase resolver::Resolver 'arena,
844 +
    graph: ?&'phase module::ModuleGraph,
845 +
    pkgName: *[u8],
846 +
    arena: *unsafe mut alloc::Arena,
847 +
    options: LowerOptions
849 848
) -> Lowerer 'arena 'phase where 'arena: 'phase {
850 849
    return Lowerer 'arena 'phase {
851 850
        arena,
852 851
        resolver: res,
853 852
        moduleGraph: graph,