Goose  Diff

Differences From Artifact [c719270db3]:

  • File bs/cir/binaryop.h — part of check-in [7d2def7b75] at 2020-12-27 14:40:24 on branch trunk — Renamed "ir" to "eir" (expression intermediate representation) and "llr" to "cir" (code intermediate representation) for clarity. (user: achavasse size: 938)

To Artifact [f7d51a0a45]:

  • File bs/cir/binaryop.h — part of check-in [26c691ecb9] at 2021-01-02 18:24:23 on branch trunk — Yet one more reference/address refactor: each calculation step (getting temp addr, getting var addr, selecting a member) is now a separate cir instruction. We need this level of generalization to be able to obtain addresses from anywhere, including variables and function parameters. (user: achavasse size: 1215)

13
14
15
16
17
18
19








20
21
22
23
24
25
26
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34







+
+
+
+
+
+
+
+







            {}

            const auto& lhs() const { return m_lhs; }
            const auto& rhs() const { return m_rhs; }

            bool canBeExecuted() const;
            bool canBeEagerlyEvaluated() const;
            bool isCompTimeStackAddr() const { return false; }

            bool operator<( const BinaryOp& rhs ) const
            {
                if( m_lhs != rhs.m_lhs )
                    return m_lhs < rhs.m_lhs;
                return m_rhs < rhs.m_rhs;
            }

        private:
            eir::Value m_lhs;
            eir::Value m_rhs;
    };

    class BinaryOpSameTypes : public BinaryOp