Browse Source

* move handling of a dummy symbol (mainly either resolving it or generating a suitable error) inside single_type to a nested function as the same code is used multiple times

Sven/Sarah Barth 3 years ago
parent
commit
98a942a37e
1 changed files with 17 additions and 20 deletions
  1. 17 20
      compiler/ptype.pas

+ 17 - 20
compiler/ptype.pas

@@ -471,6 +471,21 @@ implementation
 
 
 
 
     procedure single_type(out def:tdef;options:TSingleTypeOptions);
     procedure single_type(out def:tdef;options:TSingleTypeOptions);
+
+       function handle_dummysym(sym:tsym):tdef;
+         begin
+           sym:=resolve_generic_dummysym(sym.name);
+           if assigned(sym) and
+               not (sp_generic_dummy in sym.symoptions) and
+               (sym.typ=typesym) then
+             result:=ttypesym(sym).typedef
+           else
+             begin
+               Message(parser_e_no_generics_as_types);
+               result:=generrordef;
+             end;
+         end;
+
        var
        var
          t2 : tdef;
          t2 : tdef;
          isspecialize,
          isspecialize,
@@ -611,16 +626,7 @@ implementation
                   )
                   )
                 then
                 then
               begin
               begin
-                srsym:=resolve_generic_dummysym(srsym.name);
-                if assigned(srsym) and
-                    not (sp_generic_dummy in srsym.symoptions) and
-                    (srsym.typ=typesym) then
-                  def:=ttypesym(srsym).typedef
-                else
-                  begin
-                    Message(parser_e_no_generics_as_types);
-                    def:=generrordef;
-                  end;
+                def:=handle_dummysym(srsym);
               end
               end
             else if (def.typ=undefineddef) and
             else if (def.typ=undefineddef) and
                 (sp_generic_dummy in srsym.symoptions) then
                 (sp_generic_dummy in srsym.symoptions) then
@@ -631,16 +637,7 @@ implementation
                   begin
                   begin
                     if m_delphi in current_settings.modeswitches then
                     if m_delphi in current_settings.modeswitches then
                       begin
                       begin
-                        srsym:=resolve_generic_dummysym(srsym.name);
-                        if assigned(srsym) and
-                            not (sp_generic_dummy in srsym.symoptions) and
-                            (srsym.typ=typesym) then
-                          def:=ttypesym(srsym).typedef
-                        else
-                          begin
-                            Message(parser_e_no_generics_as_types);
-                            def:=generrordef;
-                          end;
+                        def:=handle_dummysym(srsym);
                       end
                       end
                     else
                     else
                       def:=current_genericdef;
                       def:=current_genericdef;