mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-14 23:09:59 +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;
|
function IsDefined(const aName: String): boolean;
|
||||||
procedure SetOption(Flag: TP2jsCompilerOption; Enable: boolean);
|
procedure SetOption(Flag: TP2jsCompilerOption; Enable: boolean);
|
||||||
|
|
||||||
function GetUnitInfo(const UseUnitName, InFileName, ModuleDir: String;
|
function GetUnitInfo(UseUnitName, InFileName, ModuleDir: String;
|
||||||
PCUSupport: TPCUSupport): TFindUnitInfo;
|
PCUSupport: TPCUSupport): TFindUnitInfo;
|
||||||
|
procedure CheckUnitAlias(var UseUnitName: string); virtual;
|
||||||
function FindFileWithUnitFilename(UnitFilename: string): TPas2jsCompilerFile;
|
function FindFileWithUnitFilename(UnitFilename: string): TPas2jsCompilerFile;
|
||||||
procedure LoadModuleFile(UnitFilename, UseUnitName: string;
|
procedure LoadModuleFile(UnitFilename, UseUnitName: string;
|
||||||
out aFile: TPas2jsCompilerFile; isPCU: Boolean);
|
out aFile: TPas2jsCompilerFile; isPCU: Boolean);
|
||||||
@ -5056,7 +5057,7 @@ begin
|
|||||||
Result:=FMainJSFileResolved;
|
Result:=FMainJSFileResolved;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPas2jsCompiler.GetUnitInfo(const UseUnitName, InFileName,
|
function TPas2jsCompiler.GetUnitInfo(UseUnitName, InFileName,
|
||||||
ModuleDir: String; PCUSupport: TPCUSupport): TFindUnitInfo;
|
ModuleDir: String; PCUSupport: TPCUSupport): TFindUnitInfo;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -5116,6 +5117,8 @@ begin
|
|||||||
|
|
||||||
if InFilename='' then
|
if InFilename='' then
|
||||||
begin
|
begin
|
||||||
|
CheckUnitAlias(UseUnitName);
|
||||||
|
|
||||||
if Pos('.',UseUnitname)<1 then
|
if Pos('.',UseUnitname)<1 then
|
||||||
begin
|
begin
|
||||||
// generic unit name -> search with namespaces
|
// generic unit name -> search with namespaces
|
||||||
@ -5175,6 +5178,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPas2jsCompiler.CheckUnitAlias(var UseUnitName: string);
|
||||||
|
begin
|
||||||
|
if UseUnitName='' then ;
|
||||||
|
end;
|
||||||
|
|
||||||
function TPas2jsCompiler.LoadUsedUnit(Info: TLoadUnitInfo;
|
function TPas2jsCompiler.LoadUsedUnit(Info: TLoadUnitInfo;
|
||||||
Context: TPas2jsCompilerFile): TPas2jsCompilerFile;
|
Context: TPas2jsCompilerFile): TPas2jsCompilerFile;
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ unit pas2jslibcompiler;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
SysUtils, Classes,
|
SysUtils, Classes, Math,
|
||||||
FPPJsSrcMap, Pas2jsFileCache, Pas2JSCompiler, Pas2jsPCUCompiler,
|
FPPJsSrcMap, Pas2jsFileCache, Pas2JSCompiler, Pas2jsPCUCompiler,
|
||||||
Pas2JSCompilerCfg, Pas2JSCompilerPP;
|
Pas2JSCompilerCfg, Pas2JSCompilerPP;
|
||||||
|
|
||||||
@ -47,6 +47,8 @@ Type
|
|||||||
AFileData : PAnsiChar; Var AFileDataLen: Int32); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
AFileData : PAnsiChar; Var AFileDataLen: Int32); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
||||||
TReadDirCallBack = Function (Data : Pointer;
|
TReadDirCallBack = Function (Data : Pointer;
|
||||||
P : PDirectoryCache; ADirPath: PAnsiChar): boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
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 }
|
{ TLibraryPas2JSCompiler }
|
||||||
|
|
||||||
@ -60,6 +62,8 @@ Type
|
|||||||
FOnReadDirData: Pointer;
|
FOnReadDirData: Pointer;
|
||||||
FOnReadPasData: Pointer;
|
FOnReadPasData: Pointer;
|
||||||
FOnReadPasFile: TReadPasCallBack;
|
FOnReadPasFile: TReadPasCallBack;
|
||||||
|
FOnUnitAlias: TUnitAliasCallBack;
|
||||||
|
FOnUnitAliasData: Pointer;
|
||||||
FOnWriteJSCallBack: TWriteJSCallBack;
|
FOnWriteJSCallBack: TWriteJSCallBack;
|
||||||
FOnWriteJSData: Pointer;
|
FOnWriteJSData: Pointer;
|
||||||
FReadBufferLen: Cardinal;
|
FReadBufferLen: Cardinal;
|
||||||
@ -71,6 +75,7 @@ Type
|
|||||||
Function ReadDirectory(Dir: TPas2jsCachedDirectory): boolean; virtual;
|
Function ReadDirectory(Dir: TPas2jsCachedDirectory): boolean; virtual;
|
||||||
Public
|
Public
|
||||||
Constructor Create; override;
|
Constructor Create; override;
|
||||||
|
procedure CheckUnitAlias(var UseUnitName: string); override;
|
||||||
Procedure DoLibraryLog(Sender : TObject; Const Msg : String);
|
Procedure DoLibraryLog(Sender : TObject; Const Msg : String);
|
||||||
Function LibraryRun(ACompilerExe, AWorkingDir : PAnsiChar; CommandLine : PPAnsiChar; DoReset : Boolean) :Boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
Function LibraryRun(ACompilerExe, AWorkingDir : PAnsiChar; CommandLine : PPAnsiChar; DoReset : Boolean) :Boolean; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
||||||
Property LastError : String Read FLastError Write FLastError;
|
Property LastError : String Read FLastError Write FLastError;
|
||||||
@ -84,6 +89,8 @@ Type
|
|||||||
Property ReadBufferLen : Cardinal Read FReadBufferLen Write FReadBufferLen;
|
Property ReadBufferLen : Cardinal Read FReadBufferLen Write FReadBufferLen;
|
||||||
Property OnReadDir: TReadDirCallBack read FOnReadDir write FOnReadDir;
|
Property OnReadDir: TReadDirCallBack read FOnReadDir write FOnReadDir;
|
||||||
Property OnReadDirData: Pointer read FOnReadDirData write FOnReadDirData;
|
Property OnReadDirData: Pointer read FOnReadDirData write FOnReadDirData;
|
||||||
|
Property OnUnitAlias: TUnitAliasCallBack read FOnUnitAlias write FOnUnitAlias;
|
||||||
|
Property OnUnitAliasData: Pointer read FOnUnitAliasData write FOnUnitAliasData;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Type
|
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 SetPas2JSReadDirCallBack(P : PPas2JSCompiler; ACallBack : TReadDirCallBack; CallBackData : Pointer); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
||||||
Procedure AddPas2JSDirectoryEntry(P: PDirectoryCache; AFilename: PAnsiChar;
|
Procedure AddPas2JSDirectoryEntry(P: PDirectoryCache; AFilename: PAnsiChar;
|
||||||
AAge: TPas2jsFileAgeTime; AAttr: TPas2jsFileAttr; ASize: TPas2jsFileSize); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
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};
|
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};
|
Procedure FreePas2JSCompiler(P : PPas2JSCompiler); {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
||||||
Function GetPas2JSCompiler : PPas2JSCompiler; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
Function GetPas2JSCompiler : PPas2JSCompiler; {$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
||||||
@ -129,8 +137,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLibraryPas2JSCompiler.GetLastError(AError: PAnsiChar;
|
procedure TLibraryPas2JSCompiler.GetLastError(AError: PAnsiChar;
|
||||||
Var AErrorLength: Longint; AErrorClass: PAnsiChar;
|
var AErrorLength: Longint; AErrorClass: PAnsiChar;
|
||||||
Var AErrorClassLength: Longint);
|
var AErrorClassLength: Longint);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
L : Integer;
|
L : Integer;
|
||||||
@ -192,6 +200,23 @@ begin
|
|||||||
PostProcessorSupport:=TPas2JSFSPostProcessorSupport.Create(Self);
|
PostProcessorSupport:=TPas2JSFSPostProcessorSupport.Create(Self);
|
||||||
end;
|
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);
|
procedure TLibraryPas2JSCompiler.DoLibraryLog(Sender: TObject; const Msg: String);
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnLibLogCallBack) then
|
if Assigned(FOnLibLogCallBack) then
|
||||||
@ -286,10 +311,16 @@ begin
|
|||||||
TPas2jsCachedDirectory(P).Add(AFilename,AAge,AAttr,ASize);
|
TPas2jsCachedDirectory(P).Add(AFilename,AAge,AAttr,ASize);
|
||||||
end;
|
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,
|
function RunPas2JSCompiler(P: PPas2JSCompiler; ACompilerExe,
|
||||||
AWorkingDir: PAnsiChar; CommandLine: PPAnsiChar; DoReset: Boolean): Boolean;
|
AWorkingDir: PAnsiChar; CommandLine: PPAnsiChar; DoReset: Boolean): Boolean;
|
||||||
{$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
{$IFDEF UseCDecl}cdecl{$ELSE}stdcall{$ENDIF};
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Result:=TLibraryPas2JSCompiler(P).LibraryRun(ACompilerExe,AWorkingDir,CommandLine,DoReset)
|
Result:=TLibraryPas2JSCompiler(P).LibraryRun(ACompilerExe,AWorkingDir,CommandLine,DoReset)
|
||||||
end;
|
end;
|
||||||
|
@ -15,6 +15,7 @@ exports
|
|||||||
SetPas2JSWriteJSCallBack,
|
SetPas2JSWriteJSCallBack,
|
||||||
SetPas2JSReadDirCallBack,
|
SetPas2JSReadDirCallBack,
|
||||||
AddPas2JSDirectoryEntry,
|
AddPas2JSDirectoryEntry,
|
||||||
|
SetPas2JSUnitAliasCallBack,
|
||||||
SetPas2JSCompilerLogCallBack,
|
SetPas2JSCompilerLogCallBack,
|
||||||
GetPas2JSCompilerLastError;
|
GetPas2JSCompilerLastError;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user