mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-11 11:49:24 +02:00
pastojs: added libpas2js hook SetPas2JSUnitAliasCallBack
git-svn-id: trunk@43811 -
This commit is contained in:
parent
a3a67b13d8
commit
4dc84b2a78
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -15,6 +15,7 @@ exports
|
||||
SetPas2JSWriteJSCallBack,
|
||||
SetPas2JSReadDirCallBack,
|
||||
AddPas2JSDirectoryEntry,
|
||||
SetPas2JSUnitAliasCallBack,
|
||||
SetPas2JSCompilerLogCallBack,
|
||||
GetPas2JSCompilerLastError;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user