Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
language:expressions [2024/07/19 14:26] – [Bit-width rules] rajitlanguage:expressions [2025/04/21 17:39] (current) – [Structure references] rajit
Line 78: Line 78:
   * For concatenation, the bit-width is the sum of all the components.    * For concatenation, the bit-width is the sum of all the components. 
   * For bitfield extraction, the bitwidth is determined by the number of bits extracted.   * For bitfield extraction, the bitwidth is determined by the number of bits extracted.
 +
 +==== Idiosyncrasies ====
  
 While these bit-width rules are nice because you never lose bits, they can have some unexpected consequences. One of the not-so-nice effects of these rules is that, technically, addition is no longer associative in general! For example, consider the following two different assignment statements: While these bit-width rules are nice because you never lose bits, they can have some unexpected consequences. One of the not-so-nice effects of these rules is that, technically, addition is no longer associative in general! For example, consider the following two different assignment statements:
Line 183: Line 185:
   }   }
 } }
 +</code>
 +
 +===== Structure references =====
 +
 +Functions can return [[language:types2:data#pure_structures|pure structures]], and pure structures can have function methods. The expression syntax is rich enough to support these features. As an illustrative example, consider the following:
 +
 +<code act>
 +deftype mystruct (int a, b)
 +{
 +     methods {
 +          function getsum() : int
 +          {
 +              chp {
 +                  self := a + b
 +              }
 +         }
 +         function addone() : mystruct
 +         {
 +            chp {
 +                self.a := a + 1;
 +                self.b := b + 1
 +             }
 +         }
 +    }
 +}
 +</code>
 +
 +We can have expressions of the following form:
 +
 +<code act>
 +mystruct s;
 +int a;
 +...
 +chp {
 +   ...
 +   a := s.addone().getsum();
 +   ...
 +
 </code> </code>