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;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.