Changes between Version 110 and Version 111 of IR2


Ignore:
Timestamp:
05/21/21 22:05:54 (5 years ago)
Author:
siegel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IR2

    v110 v111  
    138138  | '$rel' type-args  /* relation: set of n-tuples with specified component types */
    139139  ;
    140 declarator '*'* direct-declarator ;
     140declarator: '*'* direct-declarator ;
    141141direct-declarator:
    142142    ID  /* variable being declared */
    143   | direct-declarator '[' expr? ']'  /* array of ... */
     143  | direct-declarator '[' ']'  /* array of ... */
    144144  | direct-declarator  '(' parameter-type-list? ')'  /* function consuming ... and returning ... */
    145145  | '(' declarator ')'
    146146  ;
    147 type-name: ... /* same as declarator but without the ID */
     147abstract-declarator: '*'* abstract-direct-declarator ;
     148abstract-direct-declarator:
     149  | abstract-direct-declarator '[' expr? ']'
     150  | abstract-direct-declarator  '(' parameter-type-list? ')'
     151  | '(' abstract-declarator ')'
     152  ;
     153type-name: type-specifier abstract-declarator ;
    148154type-args: '<' type-name (',' type-name)* '>';
    149155parameter-type-list: type-specifier declarator (',' type-specifier declarator)* ;
     
    178184};
    179185}}}
     186* A *pure type name* is one in which the optional length expression for an array type never occurs.
     187* A *complete type name* is defined recursively as follows: a struct or union type is complete if and only if all the member types are complete; an array type is complete if and only if the element type is complete and the length is specified; all other types are complete.
     188
    180189
    181190== Statements ==