@@ -1629,6 +1629,7 @@ class ReferenceExpression: public Expression {
1629
1629
ReferenceExpression (const Type *type, bool is_readonly): Expression(type, false , is_readonly) {}
1630
1630
1631
1631
virtual void generate_expr (Emitter &emitter) const override { generate_load (emitter); }
1632
+ virtual bool can_generate_address () const { return true ; }
1632
1633
virtual void generate_address_read (Emitter &) const = 0;
1633
1634
virtual void generate_address_write (Emitter &) const = 0;
1634
1635
virtual void generate_load (Emitter &) const ;
@@ -1646,6 +1647,7 @@ class DummyExpression: public ReferenceExpression {
1646
1647
virtual bool eval_boolean () const override { internal_error (" DummyExpression" ); }
1647
1648
virtual Number eval_number () const override { internal_error (" DummyExpression" ); }
1648
1649
virtual std::string eval_string () const override { internal_error (" DummyExpression" ); }
1650
+ virtual bool can_generate_address () const { return false ; }
1649
1651
virtual void generate_address_read (Emitter &) const override { internal_error (" DummyExpression" ); }
1650
1652
virtual void generate_address_write (Emitter &) const override { internal_error (" DummyExpression" ); }
1651
1653
virtual void generate_load (Emitter &) const override { internal_error (" DummyExpression" ); }
@@ -1751,6 +1753,7 @@ class StringReferenceIndexExpression: public ReferenceExpression {
1751
1753
virtual bool eval_boolean () const override { internal_error (" StringReferenceIndexExpression" ); }
1752
1754
virtual Number eval_number () const override { internal_error (" StringReferenceIndexExpression" ); }
1753
1755
virtual std::string eval_string () const override { internal_error (" StringReferenceIndexExpression" ); }
1756
+ virtual bool can_generate_address () const { return false ; }
1754
1757
virtual void generate_address_read (Emitter &) const override { internal_error (" StringReferenceIndexExpression" ); }
1755
1758
virtual void generate_address_write (Emitter &) const override { internal_error (" StringReferenceIndexExpression" ); }
1756
1759
virtual void generate_load (Emitter &) const override ;
@@ -1803,6 +1806,7 @@ class BytesReferenceIndexExpression: public ReferenceExpression {
1803
1806
virtual bool eval_boolean () const override { internal_error (" BytesReferenceIndexExpression" ); }
1804
1807
virtual Number eval_number () const override { internal_error (" BytesReferenceIndexExpression" ); }
1805
1808
virtual std::string eval_string () const override { internal_error (" BytesReferenceIndexExpression" ); }
1809
+ virtual bool can_generate_address () const { return false ; }
1806
1810
virtual void generate_address_read (Emitter &) const override { internal_error (" BytesReferenceIndexExpression" ); }
1807
1811
virtual void generate_address_write (Emitter &) const override { internal_error (" BytesReferenceIndexExpression" ); }
1808
1812
virtual void generate_load (Emitter &) const override ;
@@ -1896,6 +1900,7 @@ class ArrayReferenceRangeExpression: public ReferenceExpression {
1896
1900
virtual bool eval_boolean () const override { internal_error (" ArrayReferenceRangeExpression" ); }
1897
1901
virtual Number eval_number () const override { internal_error (" ArrayReferenceRangeExpression" ); }
1898
1902
virtual std::string eval_string () const override { internal_error (" ArrayReferenceRangeExpression" ); }
1903
+ virtual bool can_generate_address () const { return false ; }
1899
1904
virtual void generate_address_read (Emitter &) const override { internal_error (" StringReferenceRangeExpression" ); }
1900
1905
virtual void generate_address_write (Emitter &) const override { internal_error (" StringReferenceRangeExpression" ); }
1901
1906
virtual void generate_load (Emitter &) const override ;
0 commit comments