Improvement of TBinaryObjectWriter.WriteIdent
from 'lagprogramming'. rtl/objpas/classes/writer.inc has procedure TBinaryObjectWriter.WriteIdent(const Ident: string);
procedure TBinaryObjectWriter.WriteIdent(const Ident: string);
begin
{ Check if Ident is a special identifier before trying to just write
Ident directly }
if UpperCase(Ident) = 'NIL' then
WriteValue(vaNil)
else if UpperCase(Ident) = 'FALSE' then
WriteValue(vaFalse)
else if UpperCase(Ident) = 'TRUE' then
WriteValue(vaTrue)
else if UpperCase(Ident) = 'NULL' then
WriteValue(vaNull) else
begin
WriteValue(vaIdent);
WriteStr(Ident);
end;
end;
The original code may compute multiple times UpperCase(Ident), even though Ident remains unchanged. The patch replaces the series of ifs with a "Case UpperCase(Ident) of".
diff --git a/rtl/objpas/classes/writer.inc b/rtl/objpas/classes/writer.inc
index 93e2d23734..64536cb29f 100644
--- a/rtl/objpas/classes/writer.inc
+++ b/rtl/objpas/classes/writer.inc
@@ -214,17 +214,12 @@ procedure TBinaryObjectWriter.WriteDate(const Value: TDateTime);
procedure TBinaryObjectWriter.WriteIdent(const Ident: string);
begin
- { Check if Ident is a special identifier before trying to just write
- Ident directly }
- if UpperCase(Ident) = 'NIL' then
- WriteValue(vaNil)
- else if UpperCase(Ident) = 'FALSE' then
- WriteValue(vaFalse)
- else if UpperCase(Ident) = 'TRUE' then
- WriteValue(vaTrue)
- else if UpperCase(Ident) = 'NULL' then
- WriteValue(vaNull) else
- begin
+ Case UpperCase(Ident) of
+ 'NIL' : WriteValue(vaNil);
+ 'FALSE' : WriteValue(vaFalse);
+ 'TRUE' : WriteValue(vaTrue);
+ 'NULL' : WriteValue(vaNull);
+ else
WriteValue(vaIdent);
WriteStr(Ident);
end;