Browse Source

default(): fix in generics for non-procvars after 1be741681648

Block added in the wrong place :|

Resolves #40409
Jonas Maebe 1 năm trước cách đây
mục cha
commit
a9f3906dd5
1 tập tin đã thay đổi với 12 bổ sung10 xóa
  1. 12 10
      compiler/ninl.pas

+ 12 - 10
compiler/ninl.pas

@@ -490,7 +490,18 @@ implementation
       begin
         if not assigned(left) or (left.nodetype<>typen) then
           internalerror(2012032102);
+
         def:=ttypenode(left).typedef;
+        if df_generic in current_procinfo.procdef.defoptions then
+          begin
+            { don't allow as a default parameter value }
+            if block_type<>bt_const then
+              result:=cpointerconstnode.create(0,def)
+            else
+              result:=cerrornode.create;
+            exit;
+          end;
+
         result:=nil;
         case def.typ of
           enumdef,
@@ -505,16 +516,7 @@ implementation
           pointerdef:
             result:=cpointerconstnode.create(0,def);
           procvardef:
-            if df_generic in current_procinfo.procdef.defoptions then
-              begin
-                { don't allow as a default parameter value }
-                if block_type<>bt_const then
-                  result:=cpointerconstnode.create(0,def)
-                else
-                  result:=cerrornode.create;
-                exit;
-              end
-            else if tprocvardef(def).size<>sizeof(pint) then
+            if tprocvardef(def).size<>sizeof(pint) then
               result:=getdefaultvarsym(def)
             else
               result:=cpointerconstnode.create(0,def);