Goose  Diff

Differences From Artifact [162dde70ac]:

  • File bs/sema/overloadset.cpp — part of check-in [46e87c202b] at 2021-08-28 17:55:26 on branch trunk —
    • Instead of falling back to unification as the default type checking rule, implemented default type checking rules similar to the default unification ones
    • Fixed a nasty generator bug
    • Fixed reference type parsing not generating a location
    • Fixed where operator not generating a location that spanned both the types and the predicates
    • Various fixes to accomodate random api changes in the latest llvm
    • Updates fmt and catch2 versions
    (user: achavasse size: 1241)

To Artifact [999bd78afd]:

  • File bs/sema/overloadset.cpp — part of check-in [0b47976c86] at 2021-09-23 21:32:13 on branch failed-ovl-resolution-optim-attempt — An attempt at optimizing overload resolution which works but provides no gain, archived in case some of the code might end up being useful some day (user: achavasse size: 1309)

16
17
18
19
20
21
22


23
24

25
26

27
28
29
30

31
32
33
34
35
36
37
16
17
18
19
20
21
22
23
24
25

26
27

28
29
30
31

32
33
34
35
36
37
38
39







+
+

-
+

-
+



-
+








    auto sigDecomp = Decompose( *signature,
        Val< pvec >()
    );

    assert( sigDecomp );

    auto pOverload = make_shared< Overload >( Overload{ pInvRule, callee } );

    bool success = false;
    m_trie = m_trie->merge( *sigDecomp->get(), [&]( auto&& previous ) -> Overload
    m_trie = m_trie->merge( *sigDecomp->get(), [&]( auto&& previous ) -> ptr< Overload >
    {
        if( previous.callee )
        if( previous )
            return move( previous );

        success = true;
        return { pInvRule, callee };
        return pOverload;
    } );

    return success;
}

OverloadSet::TCGen OverloadSet::typeCheck( const Term& callPat, const TypeCheckingContext& tcc ) const
{