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; TRTBCallBackOut=TValue; TRTBCallBack=reference to function(arg:array of const):TRTBCallBackOut; 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 DelType(NameSpace:string;Name:string);virtual;abstract; procedure AddConst(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;//добавляет переменную,синххронизированную с Data procedure DelVariable(NameSpace:string;Name:string);virtual;abstract; procedure AddCallBack(NameSpace:string;Name:string;CallBack:TRTBCallBack);virtual;abstract;//добавляет функцию/процедуру/метод procedure DelCallBack(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.