pastojs: fixed -vm

This commit is contained in:
mattias 2019-03-05 23:54:51 +00:00
parent 48c0169c38
commit 3bc17fa205

View File

@ -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}