Goose  Artifact [1d2508e4d7]

Artifact 1d2508e4d7e2a925c2753ca6f33f6e0f737db394a33d088755db22a8a8daa895:

  • File bs/builtins/types/template/tdecl.h — part of check-in [af650a9e95] at 2019-09-22 14:37:55 on branch trunk — Project renaming. (user: achavasse size: 1123)

#ifndef GOOSE_BUILTINS_TYPES_TEMPLATE_TDECL_H
#define GOOSE_BUILTINS_TYPES_TEMPLATE_TDECL_H

namespace goose::builtins
{
    extern void SetupTDeclUnification( Env& e );
    extern UniGen UnifyTDecl( const Term& lhs, const Term& rhs, UnificationContext& c );
    extern Term BuildArgPatternFromTDecl( const Term& td );

    class TDecl
    {
        public:
            template< typename T >
            TDecl( T&& type, const StringId& name ) :
                m_type( forward< T >( type ) ),
                m_name( name )
            {}

            const auto& type() const { return m_type; }
            const auto& name() const { return m_name; }

        private:
            Term m_type;
            StringId m_name;
    };

    extern bool IsTDecl( const Value& td );
}

namespace goose::ir
{
    template<>
    struct Bridge< builtins::TDecl >
    {
        static optional< Term > Domain() { return sema::DomainCompileTime(); }
        static const Term& Type();
        static Value ToValue( const builtins::TDecl& td );
        static optional< builtins::TDecl > FromValue( const Value& v );
    };
}

#endif