Files
RuntimeBuilder/Source/RuntimeBuilder.pas

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.