Martijn Laan 10 mesiacov pred
rodič
commit
0e8c3331f9

+ 13 - 4
Components/PSStackHelper.pas

@@ -35,6 +35,7 @@ type
         function HasNext: Boolean;
         function Next: String;
       end;
+    function GetChar(const ItemNo: Longint): Char;
     function GetIntArray(const ItemNo: Longint; const FieldNo: Longint = -1): TArrayOfInteger;
     function GetProc(const ItemNo: Longint; const Exec: TPSExec): TMethod;
     function GetStringArray(const ItemNo: Longint; const FieldNo: Longint = -1): TArrayOfString;
@@ -67,6 +68,15 @@ begin
   PSDynArraySetLength(Pointer(Result.Dta^), Result.aType, N);
 end;
 
+function TPSStackHelper.GetChar(const ItemNo: Longint): Char;
+begin
+  var S := GetString(ItemNo);
+  if S <> '' then
+    Result := S[1]
+  else
+    Result := #0;
+end;
+
 function TPSStackHelper.GetIntArray(const ItemNo, FieldNo: Longint): TArrayOfInteger;
 begin
   var N: Integer;
@@ -141,12 +151,11 @@ end;
 procedure TPSStackHelper.SetInt(const ItemNo: Longint; const Data: Integer;
   const FieldNo: Longint);
 begin
-  if FieldNo = -1 then
-    inherited SetInt(ItemNo, Data)
-  else begin
+  if FieldNo >= 0 then begin
     var PSVariantIFC := NewTPSVariantRecordIFC(Items[ItemNo], FieldNo);
     VNSetInt(PSVariantIFC, Data);
-  end;
+  end else
+    inherited SetInt(ItemNo, Data)
 end;
 
 end.

+ 3 - 3
Projects/Src/Setup.ScriptFunc.pas

@@ -1368,8 +1368,8 @@ var
       var OldDateSeparator := FormatSettings.DateSeparator;
       var OldTimeSeparator := FormatSettings.TimeSeparator;
       try
-        var NewDateSeparator := Stack.GetString(PStart-2)[1];
-        var NewTimeSeparator := Stack.GetString(PStart-3)[1];
+        var NewDateSeparator := Stack.GetChar(PStart-2);
+        var NewTimeSeparator := Stack.GetChar(PStart-3);
         if NewDateSeparator <> #0 then
           FormatSettings.DateSeparator := NewDateSeparator;
         if NewTimeSeparator <> #0 then
@@ -1800,7 +1800,7 @@ var
       var Separators := Stack.GetStringArray(PStart-2);
       var Parts: TArray<String>;
       if OrgName = 'StringSplitEx' then begin
-        var Quote := Stack.GetString(PStart-3)[1];
+        var Quote := Stack.GetChar(PStart-3);
         Parts := Stack.GetString(PStart-1).Split(Separators, Quote, Quote, TStringSplitOptions(Stack.GetInt(PStart-4)))
       end else
         Parts := Stack.GetString(PStart-1).Split(Separators, TStringSplitOptions(Stack.GetInt(PStart-3)));