[CLOSED] Improvement of TFPCustomImage.FindHandlerFromExtension lazarus / 64-FPC development ---------------------------------------------------------------------- lagprogramming · 2023-07-07 12:27 packages/fcl-image/src/fpimage.inc has the following function: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i class function TFPCustomImage.FindHandlerFromExtension(extension: String  ): TIHData;var s : string;    r : integer;begin  if extension='' then    Exit(nil);  extension := lowercase (extension);  if (extension <> '') and (extension[1] = '.') then    delete (extension,1,1);  with ImageHandlers do    begin      r := count-1;      s := dumchar  + extension + dumchar;      while (r >= 0) do        begin        Result := GetData(r);        if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then          Exit;        dec (r);        end;    end;  Result := nil;end;The patch at the end of the message changes the above code to Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i class function TFPCustomImage.FindHandlerFromExtension(extension: String  ): TIHData;var s : string;    r : integer;begin  if extension <> '' then    begin    extension := lowercase (extension);    if extension[1] = '.' then      delete (extension,1,1);    with ImageHandlers do      begin        r := count-1;        s := dumchar  + extension + dumchar;        while (r >= 0) do          begin          Result := GetData(r);          if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then            Exit;          dec (r);          end;      end;    end;  Result := nil;end; Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i begin  if extension='' then    Exit(nil);  //CODE  Result := nil;end;is changed to Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i begin  if extension<>'' then    begin    //CODE    end;  Result := nil;end;and after that Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i if (extension <> '') and (extension[1] = '.') thenis replaced with Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i if extension[1] = '.' then The modified pascal code avoids duplicate nil assignments to function's result and also avoids the duplicate check for a nil(empty) extension variable. Obviously, the compiler produces better code for the modified pascal sources than for the original. I've tried to keep the original code formatting style, here is the patch. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i diff --git a/packages/fcl-image/src/fpimage.inc b/packages/fcl- image/src/fpimage.incindex 531c4ec219..b4fb9dac24 100644--- a/packages/fcl-image/src/fpimage.inc+++ b/packages/fcl- image/src/fpimage.inc@@ -274,22 +274,23 @@ class function TFPCustomImage.FindHandlerFromExtension(extension: String var s : string;     r : integer; begin-  if extension='' then-    Exit(nil);-  extension := lowercase (extension);-  if (extension <> '') and (extension[1] = '.') then-    delete (extension,1,1);-  with ImageHandlers do+  if extension <> '' then     begin-      r := count-1;-      s := dumchar  + extension + dumchar;-      while (r >= 0) do-        begin-        Result := GetData(r);-        if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then-          Exit;-        dec (r);-        end;+    extension := lowercase (extension);+    if extension[1] = '.' then+      delete (extension,1,1);+    with ImageHandlers do+      begin+        r := count-1;+        s := dumchar  + extension + dumchar;+        while (r >= 0) do+          begin+          Result := GetData(r);+          if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then+            Exit;+        dec (r);+          end;+      end;     end;   Result := nil; end;