Goose  Diff

Differences From Artifact [3d9369ddcb]:

  • File bs/sema/uni-basicrules.cpp — part of check-in [bf81e30984] at 2021-09-18 17:00:20 on branch trunk —
    • Refactored LocationId into a separate class and actually use it everywhere instead of uint32_t, this makes it easier to make generic wrappers for APIs
    • g0 api: more work on the CIR api
    (user: achavasse size: 5076)

To Artifact [2e1ba66ff5]:

  • File bs/sema/uni-basicrules.cpp — part of check-in [95bdac72ca] at 2022-07-05 22:10:27 on branch trunk — TypeChecking: keep track of nested repetition indices for each sub context (user: zlodo size: 5126)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "sema.h"

namespace goose::sema
{
    TCGen UnifyVectors( VecGenerator lvg, VecGenerator rvg, const Vector& solutionVec, TypeCheckingContext tcc )
    {
        for( auto&& [u,tcc] : Unify( lvg(), rvg(), tcc ) )
        {
            auto vec = Vector::MakeAppend( solutionVec, move( u ) );

            if( lvg.fixedPartFinished() && rvg.fixedPartFinished() )
                co_yield { TERM( make_shared< Vector >( move( vec ) ) ), tcc };
            else
                co_yield UnifyVectors( lvg, rvg, vec, tcc );




|

|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "sema.h"

namespace goose::sema
{
    TCGen UnifyVectors( TCVecGenerator lvg, TCVecGenerator rvg, const Vector& solutionVec, TypeCheckingContext tcc )
    {
        for( auto&& [u,tcc] : Unify( lvg( tcc.LHSSubContext() ), rvg( tcc.RHSSubContext() ), tcc ) )
        {
            auto vec = Vector::MakeAppend( solutionVec, move( u ) );

            if( lvg.fixedPartFinished() && rvg.fixedPartFinished() )
                co_yield { TERM( make_shared< Vector >( move( vec ) ) ), tcc };
            else
                co_yield UnifyVectors( lvg, rvg, vec, tcc );
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
        {
            assert( holds_alternative< pvec >( lhs ) );
            assert( holds_alternative< pvec >( rhs ) );

            const auto& lVector = get< pvec >( lhs );
            const auto& rVector = get< pvec >( rhs );

            VecGenerator lvg( *lVector );
            VecGenerator rvg( *rVector );

            if( lvg.fixedPartFinished() && rvg.fixedPartFinished() )
            {
                co_yield { lhs, tcc };
                co_return;
            }

            Vector sol;
            co_yield UnifyVectors( lvg, rvg, sol, tcc );
        } );
    }
}







|
|












100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
        {
            assert( holds_alternative< pvec >( lhs ) );
            assert( holds_alternative< pvec >( rhs ) );

            const auto& lVector = get< pvec >( lhs );
            const auto& rVector = get< pvec >( rhs );

            TCVecGenerator lvg( *lVector );
            TCVecGenerator rvg( *rVector );

            if( lvg.fixedPartFinished() && rvg.fixedPartFinished() )
            {
                co_yield { lhs, tcc };
                co_return;
            }

            Vector sol;
            co_yield UnifyVectors( lvg, rvg, sol, tcc );
        } );
    }
}