Goose  Artifact [80fa9818a3]

Artifact 80fa9818a3151ce357d4fb1db7db2906761d70712191caf8bb61fd52c4b2d0c9:

  • File bs/sema/hole.cpp — part of check-in [e3c02e29f3] at 2018-12-11 20:20:06 on branch trunk — Some initial work on hole unification. (user: achavasse size: 859)

#include "sema.h"

namespace empathy::sema
{
    Term ToIRExpr( const Hole& h )
    {
        return visit( [&]( auto&& x )
        {
            return TVEC( TSID( hole ), TERM( x ) ).setNumHoles( 1 );
        }, h );
    }

    optional< Hole > HoleFromIRExpr( const Term& t )
    {
        auto resultUnnamed = Decompose( t,
            Vec(
                Lit( "hole"_sid ),
                Val< uint64_t >()
            )
        );

        if( resultUnnamed )
        {
            auto&& [index] = *resultUnnamed;
            return index;
        }

        auto resultNamed = Decompose( t,
            Vec(
                Lit( "hole"_sid ),
                Val< StringId >()
            )
        );

        if( resultNamed )
        {
            auto&& [name] = *resultNamed;
            return name;
        }

        return nullopt;
    }
}