pastojs: added libpas2js hook SetPas2JSUnitAliasCallBack

git-svn-id: trunk@43811 -
This commit is contained in:
Mattias Gaertner 2019-12-30 08:53:27 +00:00
parent a3a67b13d8
commit 4dc84b2a78
3 changed files with 46 additions and 6 deletions

View File

@ -660,8 +660,9 @@ type
function IsDefined(const aName: String): boolean;
procedure SetOption(Flag: TP2jsCompilerOption; Enable: boolean);
function GetUnitInfo(const UseUnitName, InFileName, ModuleDir: String;
function GetUnitInfo(UseUnitName, InFileName, ModuleDir: String;
PCUSupport: TPCUSupport): TFindUnitInfo;
procedure CheckUnitAlias(var UseUnitName: string); virtual;
function FindFileWithUnitFilename(UnitFilename: string): TPas2jsCompilerFile;
procedure LoadModuleFile(UnitFilename, UseUnitName: string;
out aFile: TPas2jsCompilerFile; isPCU: Boolean);
@ -5056,7 +5057,7 @@ begin
Result:=FMainJSFileResolved;
end;
function TPas2jsCompiler.GetUnitInfo(const UseUnitName, InFileName,
function TPas2jsCompiler.GetUnitInfo(UseUnitName, InFileName,
ModuleDir: String; PCUSupport: TPCUSupport): TFindUnitInfo;
var
@ -5116,6 +5117,8 @@ begin
if InFilename='' then
begin
CheckUnitAlias(UseUnitName);
if Pos('.',UseUnitname)<1 then
begin
// generic unit name -> search with namespaces
@ -5175,6 +5178,11 @@ begin
end;
end;
procedure TPas2jsCompiler.CheckUnitAlias(var UseUnitName: string);
begin
if UseUnitName='' then ;
end;
function TPas2jsCompiler.LoadUsedUnit(Info: TLoadUnitInfo;
Context: TPas2jsCompilerFile): TPas2jsCompilerFile;

View File

@ -25,7 +25,7 @@ unit pas2jslibcompiler;
interface
uses
SysUtils, Classes,
SysUtils, Classes, Math,
FPPJsSrcMap, Pas2jsFileCache, Pas2JSCompiler, Pas2jsPCUCompiler,
Pas2JSCompilerCfg, Pas2JSCompilerPP;
@ -47,6 +47,8 @@ Type
AFileData : PAnsiChar; Var AFileDataLen: Int32); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
TReadDirCallBack = Function (Data : Pointer;
P : PDirectoryCache; ADirPath: PAnsiChar): boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
TUnitAliasCallBack = Function (Data: Pointer;
AUnitName: PAnsiChar; AUnitNameMaxLen: Integer): boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
{ TLibraryPas2JSCompiler }
@ -60,6 +62,8 @@ Type
FOnReadDirData: Pointer;
FOnReadPasData: Pointer;
FOnReadPasFile: TReadPasCallBack;
FOnUnitAlias: TUnitAliasCallBack;
FOnUnitAliasData: Pointer;
FOnWriteJSCallBack: TWriteJSCallBack;
FOnWriteJSData: Pointer;
FReadBufferLen: Cardinal;
@ -71,6 +75,7 @@ Type
Function ReadDirectory(Dir: TPas2jsCachedDirectory): boolean; virtual;
Public
Constructor Create; override;
procedure CheckUnitAlias(var UseUnitName: string); override;
Procedure DoLibraryLog(Sender : TObject; Const Msg : String);
Function LibraryRun(ACompilerExe, AWorkingDir : PAnsiChar; CommandLine : PPAnsiChar; DoReset : Boolean) :Boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
Property LastError : String Read FLastError Write FLastError;
@ -84,6 +89,8 @@ Type
Property ReadBufferLen : Cardinal Read FReadBufferLen Write FReadBufferLen;
Property OnReadDir: TReadDirCallBack read FOnReadDir write FOnReadDir;
Property OnReadDirData: Pointer read FOnReadDirData write FOnReadDirData;
Property OnUnitAlias: TUnitAliasCallBack read FOnUnitAlias write FOnUnitAlias;
Property OnUnitAliasData: Pointer read FOnUnitAliasData write FOnUnitAliasData;
end;
Type
@ -95,6 +102,7 @@ Procedure SetPas2JSReadPasCallBack(P : PPas2JSCompiler; ACallBack : TReadPasCall
Procedure SetPas2JSReadDirCallBack(P : PPas2JSCompiler; ACallBack : TReadDirCallBack; CallBackData : Pointer); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
Procedure AddPas2JSDirectoryEntry(P: PDirectoryCache; AFilename: PAnsiChar;
AAge: TPas2jsFileAgeTime; AAttr: TPas2jsFileAttr; ASize: TPas2jsFileSize); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
Procedure SetPas2JSUnitAliasCallBack(P : PPas2JSCompiler; ACallBack : TUnitAliasCallBack; CallBackData : Pointer); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
Function RunPas2JSCompiler(P : PPas2JSCompiler; ACompilerExe, AWorkingDir : PAnsiChar; CommandLine : PPAnsiChar; DoReset : Boolean) : Boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
Procedure FreePas2JSCompiler(P : PPas2JSCompiler); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
Function GetPas2JSCompiler : PPas2JSCompiler; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
@ -129,8 +137,8 @@ begin
end;
procedure TLibraryPas2JSCompiler.GetLastError(AError: PAnsiChar;
Var AErrorLength: Longint; AErrorClass: PAnsiChar;
Var AErrorClassLength: Longint);
var AErrorLength: Longint; AErrorClass: PAnsiChar;
var AErrorClassLength: Longint);
Var
L : Integer;
@ -192,6 +200,23 @@ begin
PostProcessorSupport:=TPas2JSFSPostProcessorSupport.Create(Self);
end;
procedure TLibraryPas2JSCompiler.CheckUnitAlias(var UseUnitName: string);
var
UnitNameLen, UnitNameMaxLen: Integer;
s: String;
begin
inherited CheckUnitAlias(UseUnitName);
UnitNameLen:=length(UseUnitName);
if (UnitNameLen>0) and Assigned(OnUnitAlias) then
begin
UnitNameMaxLen:=Max(UnitNameLen,255);
s:=UseUnitName;
SetLength(s,UnitNameMaxLen);
if OnUnitAlias(OnUnitAliasData,Pointer(s),UnitNameLen,UnitNameMaxLen) then
UseUnitName:=LeftStr(s,UnitNameLen);
end;
end;
procedure TLibraryPas2JSCompiler.DoLibraryLog(Sender: TObject; const Msg: String);
begin
if Assigned(FOnLibLogCallBack) then
@ -286,10 +311,16 @@ begin
TPas2jsCachedDirectory(P).Add(AFilename,AAge,AAttr,ASize);
end;
procedure SetPas2JSUnitAliasCallBack(P: PPas2JSCompiler;
ACallBack: TUnitAliasCallBack; CallBackData: Pointer); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
begin
TLibraryPas2JSCompiler(P).OnUnitAlias:=ACallBack;
TLibraryPas2JSCompiler(P).OnUnitAliasData:=CallBackData;
end;
function RunPas2JSCompiler(P: PPas2JSCompiler; ACompilerExe,
AWorkingDir: PAnsiChar; CommandLine: PPAnsiChar; DoReset: Boolean): Boolean;
{$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
begin
Result:=TLibraryPas2JSCompiler(P).LibraryRun(ACompilerExe,AWorkingDir,CommandLine,DoReset)
end;

View File

@ -15,6 +15,7 @@ exports
SetPas2JSWriteJSCallBack,
SetPas2JSReadDirCallBack,
AddPas2JSDirectoryEntry,
SetPas2JSUnitAliasCallBack,
SetPas2JSCompilerLogCallBack,
GetPas2JSCompilerLastError;