mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-14 21:59:24 +02:00
pastojs: fixed -vm
This commit is contained in:
parent
48c0169c38
commit
3bc17fa205
@ -37,7 +37,9 @@ uses
|
||||
{$IFDEF HASFILESYSTEM}
|
||||
pas2jsfileutils,
|
||||
{$ENDIF}
|
||||
Classes, SysUtils, PasTree, PScanner, jstree, jsbase, jswriter, fpjson;
|
||||
Types, Classes, SysUtils,
|
||||
PasTree, PScanner,
|
||||
jstree, jsbase, jswriter, fpjson;
|
||||
|
||||
const
|
||||
ExitCodeErrorInternal = 1; // internal error
|
||||
@ -123,7 +125,7 @@ type
|
||||
FLastMsgNumber: integer;
|
||||
FLastMsgTxt: string;
|
||||
FLastMsgType: TMessageType;
|
||||
FMsgNumberDisabled: array of Integer;// sorted ascending
|
||||
FMsgNumberDisabled: TIntegerDynArray;// sorted ascending
|
||||
FMsg: TFPList; // list of TPas2jsMessage
|
||||
FOnFormatPath: TPScannerFormatPathEvent;
|
||||
FOnLog: TPas2jsLogEvent;
|
||||
@ -144,11 +146,14 @@ type
|
||||
procedure SetOutputFilename(AValue: string);
|
||||
procedure SetSorted(AValue: boolean);
|
||||
procedure DoLogRaw(const Msg: string; SkipEncoding : Boolean);
|
||||
function Concatenate(Args: array of {$IFDEF Pas2JS}jsvalue{$ELSE}const{$ENDIF}): string;
|
||||
Protected
|
||||
// so it can be overridden
|
||||
function CreateTextWriter(const aFileName: string): TTextWriter; virtual;
|
||||
public
|
||||
{$IFDEF EnableLogFile}
|
||||
LogFile: TStringList;
|
||||
procedure LogF(args: array of const);
|
||||
{$ENDIF}
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure RegisterMsg(MsgType: TMessageType; MsgNumber: integer; Pattern: string);
|
||||
@ -185,6 +190,7 @@ type
|
||||
procedure CloseDebugLog;
|
||||
procedure DebugLogWriteLn(Msg: string); overload;
|
||||
function GetEncodingCaption: string;
|
||||
class function Concatenate(Args: array of {$IFDEF Pas2JS}jsvalue{$ELSE}const{$ENDIF}): string;
|
||||
public
|
||||
property Encoding: string read FEncoding write SetEncoding; // normalized
|
||||
property MsgCount: integer read GetMsgCount;
|
||||
@ -610,6 +616,26 @@ end;
|
||||
|
||||
procedure TPas2jsLogger.SetMsgNumberDisabled(MsgNumber: integer; AValue: boolean
|
||||
);
|
||||
{$IF defined(FPC) and (FPC_FULLVERSION<30101)}
|
||||
procedure Delete(var A: TIntegerDynArray; Index, Count: integer); overload;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=Index+Count to length(A)-1 do
|
||||
A[i-Count]:=A[i];
|
||||
SetLength(A,length(A)-Count);
|
||||
end;
|
||||
|
||||
procedure Insert(Item: integer; var A: TIntegerDynArray; Index: integer); overload;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
SetLength(A,length(A)+1);
|
||||
for i:=length(A)-1 downto Index+1 do
|
||||
A[i]:=A[i-1];
|
||||
A[Index]:=Item;
|
||||
end;
|
||||
{$ENDIF}
|
||||
var
|
||||
InsertPos, OldCount: Integer;
|
||||
begin
|
||||
@ -621,25 +647,13 @@ begin
|
||||
if (InsertPos<OldCount) and (FMsgNumberDisabled[InsertPos]=MsgNumber) then
|
||||
exit; // already disabled
|
||||
// insert into array
|
||||
{$IF defined(FPC) and (FPC_FULLVERSION<30101)}
|
||||
SetLength(FMsgNumberDisabled,OldCount+1);
|
||||
FMsgNumberDisabled[InsertPos]:=MsgNumber;
|
||||
{$ELSE}
|
||||
Insert(MsgNumber,FMsgNumberDisabled,InsertPos);
|
||||
{$ENDIF}
|
||||
end else begin
|
||||
// disable
|
||||
InsertPos:=FindMsgNumberDisabled(MsgNumber,false);
|
||||
if InsertPos<0 then exit;
|
||||
// delete from array
|
||||
{$IF defined(FPC) and (FPC_FULLVERSION<30101)}
|
||||
if InsertPos+1<OldCount then
|
||||
Move(FMsgNumberDisabled[InsertPos+1],FMsgNumberDisabled[InsertPos],
|
||||
SizeOf(Integer)*(OldCount-InsertPos-1));
|
||||
SetLength(FMsgNumberDisabled,OldCount-1);
|
||||
{$ELSE}
|
||||
Delete(FMsgNumberDisabled,InsertPos,1);
|
||||
{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -705,63 +719,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPas2jsLogger.Concatenate(
|
||||
Args: array of {$IFDEF Pas2JS}jsvalue{$ELSE}const{$ENDIF}): string;
|
||||
var
|
||||
s: String;
|
||||
i: Integer;
|
||||
{$IFDEF Pas2JS}
|
||||
V: JSValue;
|
||||
{$ELSE}
|
||||
V: TVarRec;
|
||||
{$ENDIF}
|
||||
begin
|
||||
s:='';
|
||||
for i:=Low(Args) to High(Args) do
|
||||
begin
|
||||
V:=Args[i];
|
||||
{$IFDEF Pas2JS}
|
||||
case jsTypeOf(V) of
|
||||
'boolean':
|
||||
if V then s+='true' else s+='false';
|
||||
'number':
|
||||
if isInteger(V) then
|
||||
s+=str(NativeInt(V))
|
||||
else
|
||||
s+=str(Double(V));
|
||||
'string':
|
||||
s+=String(V);
|
||||
else continue;
|
||||
end;
|
||||
{$ELSE}
|
||||
case V.VType of
|
||||
vtInteger: s += IntToStr(V.VInteger);
|
||||
vtBoolean: s += BoolToStr(V.VBoolean);
|
||||
vtChar: s += V.VChar;
|
||||
{$ifndef FPUNONE}
|
||||
vtExtended: ; // V.VExtended^;
|
||||
{$ENDIF}
|
||||
vtString: s += V.VString^;
|
||||
vtPointer: ; // V.VPointer;
|
||||
vtPChar: s += V.VPChar;
|
||||
vtObject: ; // V.VObject;
|
||||
vtClass: ; // V.VClass;
|
||||
vtWideChar: s += AnsiString(V.VWideChar);
|
||||
vtPWideChar: s += AnsiString(V.VPWideChar);
|
||||
vtAnsiString: s += AnsiString(V.VAnsiString);
|
||||
vtCurrency: ; // V.VCurrency^);
|
||||
vtVariant: ; // V.VVariant^);
|
||||
vtInterface: ; // V.VInterface^);
|
||||
vtWidestring: s += AnsiString(WideString(V.VWideString));
|
||||
vtInt64: s += IntToStr(V.VInt64^);
|
||||
vtQWord: s += IntToStr(V.VQWord^);
|
||||
vtUnicodeString:s += AnsiString(UnicodeString(V.VUnicodeString));
|
||||
end;
|
||||
{$ENDIF}
|
||||
end;
|
||||
Result:=s;
|
||||
end;
|
||||
|
||||
constructor TPas2jsLogger.Create;
|
||||
begin
|
||||
FMsg:=TFPList.Create;
|
||||
@ -906,6 +863,63 @@ begin
|
||||
Result:='utf-8';
|
||||
end;
|
||||
|
||||
class function TPas2jsLogger.Concatenate(
|
||||
Args: array of {$IFDEF Pas2JS}jsvalue{$ELSE}const{$ENDIF}): string;
|
||||
var
|
||||
s: String;
|
||||
i: Integer;
|
||||
{$IFDEF Pas2JS}
|
||||
V: JSValue;
|
||||
{$ELSE}
|
||||
V: TVarRec;
|
||||
{$ENDIF}
|
||||
begin
|
||||
s:='';
|
||||
for i:=Low(Args) to High(Args) do
|
||||
begin
|
||||
V:=Args[i];
|
||||
{$IFDEF Pas2JS}
|
||||
case jsTypeOf(V) of
|
||||
'boolean':
|
||||
if V then s+='true' else s+='false';
|
||||
'number':
|
||||
if isInteger(V) then
|
||||
s+=str(NativeInt(V))
|
||||
else
|
||||
s+=str(Double(V));
|
||||
'string':
|
||||
s+=String(V);
|
||||
else continue;
|
||||
end;
|
||||
{$ELSE}
|
||||
case V.VType of
|
||||
vtInteger: s += IntToStr(V.VInteger);
|
||||
vtBoolean: s += BoolToStr(V.VBoolean);
|
||||
vtChar: s += V.VChar;
|
||||
{$ifndef FPUNONE}
|
||||
vtExtended: ; // V.VExtended^;
|
||||
{$ENDIF}
|
||||
vtString: s += V.VString^;
|
||||
vtPointer: ; // V.VPointer;
|
||||
vtPChar: s += V.VPChar;
|
||||
vtObject: ; // V.VObject;
|
||||
vtClass: ; // V.VClass;
|
||||
vtWideChar: s += AnsiString(V.VWideChar);
|
||||
vtPWideChar: s += AnsiString(V.VPWideChar);
|
||||
vtAnsiString: s += AnsiString(V.VAnsiString);
|
||||
vtCurrency: ; // V.VCurrency^);
|
||||
vtVariant: ; // V.VVariant^);
|
||||
vtInterface: ; // V.VInterface^);
|
||||
vtWidestring: s += AnsiString(WideString(V.VWideString));
|
||||
vtInt64: s += IntToStr(V.VInt64^);
|
||||
vtQWord: s += IntToStr(V.VQWord^);
|
||||
vtUnicodeString:s += AnsiString(UnicodeString(V.VUnicodeString));
|
||||
end;
|
||||
{$ENDIF}
|
||||
end;
|
||||
Result:=s;
|
||||
end;
|
||||
|
||||
procedure TPas2jsLogger.LogPlain(const Msg: string);
|
||||
var
|
||||
s: String;
|
||||
@ -1059,7 +1073,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TPas2jsLogger.CreateTextWriter(const aFileName : string) : TTextWriter;
|
||||
function TPas2jsLogger.CreateTextWriter(const aFileName: string): TTextWriter;
|
||||
|
||||
begin
|
||||
{$IFDEF HASFILESYSTEM}
|
||||
@ -1069,6 +1083,16 @@ begin
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
{$IFDEF EnableLogFile}
|
||||
procedure TPas2jsLogger.LogF(args: array of const);
|
||||
begin
|
||||
if LogFile=nil then
|
||||
LogFile:=TStringList.Create;
|
||||
LogFile.Add(TPas2jsLogger.Concatenate(args));
|
||||
LogFile.SaveToFile('c:\tmp\libpas2jsparams.txt');
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
procedure TPas2jsLogger.OpenOutputFile;
|
||||
begin
|
||||
{$IFDEF HASFILESYSTEM}
|
||||
|
Loading…
Reference in New Issue
Block a user