/[eiffelstudio]/branches/CAT_mono/Src/framework/parser/parser/eiffel.y
ViewVC logotype

Diff of /branches/CAT_mono/Src/framework/parser/parser/eiffel.y

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 69686 by juliant, Tue Jul 24 17:18:14 2007 UTC revision 69687 by martins, Wed Jul 25 18:55:08 2007 UTC
# Line 163  create Line 163  create
163  %type <STRING_AS>                       Manifest_string Non_empty_string Default_manifest_string Typed_manifest_string Infix_operator Prefix_operator Alias_name  %type <STRING_AS>                       Manifest_string Non_empty_string Default_manifest_string Typed_manifest_string Infix_operator Prefix_operator Alias_name
164  %type <TAGGED_AS>                       Assertion_clause  %type <TAGGED_AS>                       Assertion_clause
165  %type <TUPLE_AS>                        Manifest_tuple  %type <TUPLE_AS>                        Manifest_tuple
166  %type <TYPE_AS>                         Type Non_class_type Typed Class_or_tuple_type Class_type Tuple_type Type_no_id Constraint_type  %type <TYPE_AS>                         Type Non_class_type Typed Class_or_tuple_type Class_type Tuple_type Type_no_id Constraint_type Actual_generic_type
167  %type <PAIR [SYMBOL_AS, TYPE_AS]> Type_mark  %type <PAIR [SYMBOL_AS, TYPE_AS]> Type_mark
168  %type <CLASS_TYPE_AS>           Parent_class_type  %type <CLASS_TYPE_AS>           Parent_class_type
169  %type <TYPE_DEC_AS>                     Entity_declaration_group  %type <TYPE_DEC_AS>                     Entity_declaration_group
# Line 200  create Line 200  create
200  %type <EIFFEL_LIST [STRING_AS]>                 String_list  %type <EIFFEL_LIST [STRING_AS]>                 String_list
201  %type <DEBUG_KEY_LIST_AS>       Debug_keys  %type <DEBUG_KEY_LIST_AS>       Debug_keys
202  %type <EIFFEL_LIST [TAGGED_AS]>                 Assertion Assertion_list  %type <EIFFEL_LIST [TAGGED_AS]>                 Assertion Assertion_list
203  %type <TYPE_LIST_AS>    Generics Generics_opt Type_list Type_list_impl Actual_parameter_list  %type <TYPE_LIST_AS>    Generics Generics_opt Type_list Type_list_impl Actual_parameter_list Generic_type_list Generic_type_list_impl
204  %type <TYPE_DEC_LIST_AS>                Entity_declaration_list Named_parameter_list  %type <TYPE_DEC_LIST_AS>                Entity_declaration_list Named_parameter_list
205  %type <LOCAL_DEC_LIST_AS>       Local_declarations  %type <LOCAL_DEC_LIST_AS>       Local_declarations
206  %type <FORMAL_ARGU_DEC_LIST_AS> Formal_arguments Optional_formal_arguments  %type <FORMAL_ARGU_DEC_LIST_AS> Formal_arguments Optional_formal_arguments
# Line 1532  Generics_opt: -- Empty Line 1532  Generics_opt: -- Empty
1532                          }                          }
1533          ;          ;
1534    
1535  Generics:       TE_LSQURE Type_list TE_RSQURE  Generics:       TE_LSQURE Generic_type_list TE_RSQURE
1536                          {                          {
1537                                  $$ := $2                                  $$ := $2
1538                                  if $$ /= Void then                                  if $$ /= Void then
# Line 1569  Type_list_impl: Type Line 1569  Type_list_impl: Type
1569                          }                          }
1570          ;          ;
1571    
1572    Generic_type_list: Add_counter Generic_type_list_impl Remove_counter
1573                    { $$ := $2 }
1574            ;
1575    
1576    Generic_type_list_impl: Actual_generic_type
1577                            {
1578                                    $$ := ast_factory.new_eiffel_list_type (counter_value + 1)
1579                                    if $$ /= Void and then $1 /= Void then
1580                                            $$.reverse_extend ($1)
1581                                    end
1582                            }
1583            |       Actual_generic_type TE_COMMA Increment_counter Generic_type_list_impl
1584                            {
1585                                    $$ := $4
1586                                    if $$ /= Void and then $1 /= Void then
1587                                            $$.reverse_extend ($1)
1588                                            ast_factory.reverse_extend_separator ($$, $2)
1589                                    end
1590                            }
1591            ;
1592    
1593    Actual_generic_type: Type
1594                            {
1595                                    $$ := $1
1596                            }
1597            | TE_VARIANT Type
1598                            {
1599                                    $$ := $2
1600                                    $$.set_covariant_keyword ($1)
1601                            }
1602            ;
1603    
1604    
1605  Tuple_type: TE_TUPLE  Tuple_type: TE_TUPLE
1606                          { $$ := ast_factory.new_class_type_as ($1, Void) }                          { $$ := ast_factory.new_class_type_as ($1, Void) }
1607          |       TE_TUPLE Add_counter Add_counter2 TE_LSQURE TE_RSQURE          |       TE_TUPLE Add_counter Add_counter2 TE_LSQURE TE_RSQURE
# Line 1731  Formal_parameter: TE_REFERENCE Class_ide Line 1764  Formal_parameter: TE_REFERENCE Class_ide
1764                                                  -- therefore not part of `TE_ID'.                                                  -- therefore not part of `TE_ID'.
1765                                          raise_error                                          raise_error
1766                                  else                                  else
1767                                          $$ := ast_factory.new_formal_as ($2, True, False, $1)                                          $$ := ast_factory.new_formal_as ($2, True, False, False, $1)
1768                                  end                                  end
1769                          }                          }
1770          | TE_EXPANDED Class_identifier          | TE_EXPANDED Class_identifier
# Line 1745  Formal_parameter: TE_REFERENCE Class_ide Line 1778  Formal_parameter: TE_REFERENCE Class_ide
1778                                                  -- therefore not part of `TE_ID'.                                                  -- therefore not part of `TE_ID'.
1779                                          raise_error                                          raise_error
1780                                  else                                  else
1781                                          $$ := ast_factory.new_formal_as ($2, False, True, $1)                                          $$ := ast_factory.new_formal_as ($2, False, True, False, $1)
1782                                    end
1783                            }
1784            | TE_FROZEN Class_identifier
1785                            {
1786                                    if $2 /= Void and then none_class_name_id = $2.name_id then
1787                                                    -- Trigger an error when constraint is NONE.
1788                                                    -- Needs to be done manually since current test for
1789                                                    -- checking that `$2' is not a class name
1790                                                    -- will fail for NONE, whereas before there were some
1791                                                    -- syntactic conflict since `NONE' was a keyword and
1792                                                    -- therefore not part of `TE_ID'.
1793                                            raise_error
1794                                    else
1795                                            $$ := ast_factory.new_formal_as ($2, False, False, True, $1)
1796                                    end
1797                            }
1798    
1799            | TE_INVARIANT Class_identifier
1800                            {
1801                                    if $2 /= Void and then none_class_name_id = $2.name_id then
1802                                                    -- Trigger an error when constraint is NONE.
1803                                                    -- Needs to be done manually since current test for
1804                                                    -- checking that `$2' is not a class name
1805                                                    -- will fail for NONE, whereas before there were some
1806                                                    -- syntactic conflict since `NONE' was a keyword and
1807                                                    -- therefore not part of `TE_ID'.
1808                                            raise_error
1809                                    else
1810                                            $$ := ast_factory.new_formal_as ($2, False, False, True, $1)
1811                                  end                                  end
1812                          }                          }
1813    
1814    
1815    
1816          |       Class_identifier          |       Class_identifier
1817                          {                          {
1818                                  if $1 /= Void and then none_class_name_id = $1.name_id then                                  if $1 /= Void and then none_class_name_id = $1.name_id then
# Line 1760  Formal_parameter: TE_REFERENCE Class_ide Line 1824  Formal_parameter: TE_REFERENCE Class_ide
1824                                                  -- therefore not part of `TE_ID'.                                                  -- therefore not part of `TE_ID'.
1825                                          raise_error                                          raise_error
1826                                  else                                  else
1827                                          $$ := ast_factory.new_formal_as ($1, False, False, Void)                                          $$ := ast_factory.new_formal_as ($1, False, False, False, Void)
1828                                  end                                  end
1829                          }                          }
1830          ;          ;

Legend:
Removed from v.69686  
changed lines
  Added in v.69687

  ViewVC Help
Powered by ViewVC 1.1.23