Goose  Diff

Differences From Artifact [ddad63584b]:

  • File bs/sema/uni-ruleset.h — part of check-in [bd77ee55b1] at 2018-11-25 20:52:53 on branch trunk — Implemented basic unification rules. (user: achavasse size: 984)

To Artifact [23277329be]:

  • File bs/sema/uni-ruleset.h — part of check-in [acc4df2877] at 2018-11-25 21:41:11 on branch trunk — sema: added a class for named holes and its conversion from/to an ir expression. (user: achavasse size: 578)

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    class UnificationRuleSet
    {
        public:
            using Func = function< optional< Term > ( const Term& lhs, const Term& rhs, UnificationContext& ) >;

            UnificationRuleSet();

            template< typename F >
            void addRule( const Term& pat, F&& func )
            {
                m_trie = Merge( m_trie, TVEC( pat, pat ), [&]( auto&& ){ return func; } );
            }

            template< typename F >
            void addRule( const Term& pat1, const Term& pat2, F&& func )
            {
                m_trie = Merge( m_trie, TVEC( pat1, pat2 ), [&]( auto&& ){ return func; } );
                m_trie = Merge( m_trie, TVEC( pat2, pat1 ), [&]( auto&& ){ return func; } );
            }

            const auto& trie() const { return m_trie; }

        private:
            Trie< Func > m_trie;
    };
}







<
|
<
<
<
<
<
|
<
<
<
<







8
9
10
11
12
13
14

15





16




17
18
19
20
21
22
23
    class UnificationRuleSet
    {
        public:
            using Func = function< optional< Term > ( const Term& lhs, const Term& rhs, UnificationContext& ) >;

            UnificationRuleSet();


            void addRule( const Term& pat, Func f );





            void addRule( const Term& pat1, const Term& pat2, Func f );





            const auto& trie() const { return m_trie; }

        private:
            Trie< Func > m_trie;
    };
}