121 lines
3.4 KiB
ObjectPascal
121 lines
3.4 KiB
ObjectPascal
unit RuntimeBuilder;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.TypInfo,System.Rtti;
|
|
|
|
const
|
|
CRTBCallTypeNil=ccStdCall;
|
|
CRTBCallTypeRegister=ccReg;
|
|
CRTBCallTypeStdCall=ccStdCall;
|
|
CRTBCallTypeCdecl=ccCdecl;
|
|
CRTBCallTypePascal=ccPascal;
|
|
CRTBCallTypeSafeCall=ccSafeCall;
|
|
CRTBCallType64Call=CRTBCallTypeNil;
|
|
CRTBCallTypeScript=CRTBCallTypeNil;
|
|
CRTBCallTypeDefault=CRTBCallTypeNil;
|
|
|
|
type
|
|
TRTBCompiler=class;
|
|
|
|
TRTBCallType=TCallConv;
|
|
|
|
TRTBType=PTypeInfo;
|
|
|
|
TRTBFunc=class abstract
|
|
public
|
|
function Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;virtual;abstract;
|
|
end;
|
|
|
|
TRTBVar=class abstract
|
|
protected
|
|
procedure SetVal(Val:TValue);virtual;abstract;
|
|
function GetVal:TValue;virtual;abstract;
|
|
public
|
|
property Val:TValue read GetVal write SetVal;
|
|
end;
|
|
|
|
TRTBModule=class abstract
|
|
protected
|
|
function GetFuntion(Name:string):TRTBFunc;virtual;abstract;
|
|
function GetVar(Name:string):TRTBVar;virtual;abstract;
|
|
public
|
|
property Funtion[Name:string]:TRTBFunc read GetFuntion;
|
|
property &Var[Name:string]:TRTBVar read GetVar;
|
|
end;
|
|
|
|
TRTBSource=class abstract
|
|
protected
|
|
Compiler:TRTBCompiler;
|
|
function GetText:string;virtual;abstract;
|
|
procedure SetText(S:string);virtual;abstract;
|
|
public
|
|
constructor Create(Compiler:TRTBCompiler);
|
|
|
|
procedure LoadLib(Name:string);virtual;abstract;
|
|
procedure UnLoadLib(Name:string);virtual;abstract;
|
|
|
|
procedure AddNameSpace(Name:string);virtual;abstract;
|
|
procedure DelNameSpace(Name:string);virtual;abstract;
|
|
|
|
procedure AddType(NameSpace:string;Name:string;&Type:TRTBType);virtual;abstract;
|
|
procedure ExportType(NameSpace:string;Name:string;&Type:TRTBType);virtual;abstract;
|
|
procedure DelType(NameSpace:string;Name:string);virtual;abstract;
|
|
|
|
procedure AddConst(NameSpace:string;Name:string;Val:TValue);virtual;abstract;
|
|
procedure ExportConst(NameSpace:string;Name:string;Val:TValue);virtual;abstract;
|
|
procedure DelConst(NameSpace:string;Name:string);virtual;abstract;
|
|
|
|
procedure AddVariable(NameSpace:string;Name:string;var Data);virtual;abstract;
|
|
procedure ExportVariable(NameSpace:string;Name:string;var Data);virtual;abstract;
|
|
procedure DelVariable(NameSpace:string;Name:string);virtual;abstract;
|
|
|
|
procedure &Register(NameSpace:string;Name:string;&Type:TRTBType);virtual;abstract;
|
|
procedure UnRegister(NameSpace:string;Name:string);virtual;abstract;
|
|
procedure &RegisterFunction(NameSpace:string;Name:string);virtual;abstract;
|
|
procedure UnRegisterFunction(NameSpace:string;Name:string);virtual;abstract;
|
|
|
|
function Compilate:TRTBModule;virtual;abstract;
|
|
procedure LoadFromFile(&File:string);virtual;
|
|
procedure SaveToFile(&File:string);virtual;
|
|
property Text:string read GetText write SetText;
|
|
end;
|
|
|
|
TRTBCompiler=class abstract
|
|
public
|
|
function GenNewSrc():TRTBSource;virtual;abstract;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.SysUtils,System.Classes;
|
|
|
|
constructor TRTBSource.Create(Compiler:TRTBCompiler);
|
|
begin
|
|
Self.Compiler:=Compiler;
|
|
end;
|
|
|
|
procedure TRTBSource.LoadFromFile(&File:string);
|
|
var
|
|
Data:TStrings;
|
|
begin
|
|
Data:=TStringList.Create;
|
|
Data.LoadFromFile(&File);
|
|
Text:=Data.Text;
|
|
FreeAndNil(Data);
|
|
end;
|
|
|
|
procedure TRTBSource.SaveToFile(&File:string);
|
|
var
|
|
Data:TStrings;
|
|
begin
|
|
Data:=TStringList.Create;
|
|
Data.Text:=Text;
|
|
Data.SaveToFile(&File);
|
|
FreeAndNil(Data);
|
|
end;
|
|
|
|
end.
|