function TIfPasScript.ReadParams(WithList: TIFList; ProcDef: string; Vars, Params: PVariableManager): Boolean;
{Call an internal/external Procedure}
var
w: PIfVariant;
I: Longint;
function IRem(s: string): string;
{Remove the !}
begin
Delete(s, 1, 1);
IRem := s;
end; {irem}
begin
ReadParams := False;
if (IntProcDefParam(procDef, -1) <> 0) and (Parser.CurrTokenId <> CSTI_OpenRound) then begin
RunError(Self, ERoundOpenExpected);
exit;
end; {if}
if (IntProcDefParam(procDef, -1) = 0) and (Parser.CurrTokenId = CSTI_OpenRound) then begin
Parser.Next;
if Parser.CurrTokenId = CSTI_CloseRound then begin
Parser.Next;
end else begin
RunError(Self, ECloseRoundExpected);
exit;
end;
end; {if}
if Parser.CurrTokenId = CSTI_OpenRound then begin
for I := 1 to IntProcDefParam(procDef, -1) do begin
Parser.Next;
if Pos('!', IntProcDefName(procDef, I)) = 1 then begin
{Expect a variable}
case GetIdentifier(WithList, Vars, 1, w) of
0: begin
exit;
end;
2: begin
DestroyCajVariant(w);
RunError(Self, EVariableExpected);
exit;
end;
end;
if (w^.Flags and $1) <> 0 then begin
RunError(Self, EVariableExpected);
VM_Destroy(Params);
exit;
end; {if}
w := GetVarLink(w);
if (Longint(w^.VType) <> IntProcDefParam(procDef, I)) and not ((PTypeRec(IntProcDefParam(procDef, I))^.Ext = nil) and (PTypeRec(IntProcDefParam(procDef, I))^.atypeid = CSV_Array)) then begin
function TIfPasScript.RunBegin(WithList: TIFList; Vars: PVariableManager; Skip: Boolean): Boolean;
{ Run the Script, this is the main part of the script engine }
var
C, c2, C3: PIfVariant;
IPos, IStart, ii, IEnd: Longint;
b: Boolean;
{$IFNDEF NOCLASSES}
NewWithList: TIFList;
{$ENDIF}
BeginMode: TBeginMode;
lBreak: Boolean;
begin
if Parser.CurrTokenId = CSTII_repeat then BeginMode := mbrepeat else
if Parser.CurrTokenId = CSTII_try then BeginMode := mbTry else
BeginMode := mbOneLiner;
Inc(FBeginNesting);
if FBeginNesting > FMaxBeginNesting then
begin
Dec(FBeginNesting);
RunError(Self, EOutOfMemoryError);
RunBegin := False;
Exit;
end;
if Skip then begin
if (Parser.CurrTokenId = CSTII_Begin) or (Parser.CurrTokenId = CSTII_Case) or (Parser.CurrTokenId = CSTII_repeat) or (Parser.CurrTokenId = CSTII_Try) or (Parser.CurrtokenId = CSTII_Except) or (Parser.CurrTokenId = CSTII_Finally) then begin