From b4da0b0b7ab3105f07e2467d13c8154257a15f5d Mon Sep 17 00:00:00 2001 From: Artem3213212 Date: Wed, 9 May 2018 11:07:55 +0300 Subject: [PATCH] API Update:Add CallBack --- Source/RuntimeBuilder.Fasm.pas | 15 +++++++++++++-- Source/RuntimeBuilder.Lua.pas | 14 ++------------ Source/RuntimeBuilder.pas | 6 ++++++ Tests/Unit1.pas | 2 +- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/Source/RuntimeBuilder.Fasm.pas b/Source/RuntimeBuilder.Fasm.pas index 8a0edfd..814b6ac 100644 --- a/Source/RuntimeBuilder.Fasm.pas +++ b/Source/RuntimeBuilder.Fasm.pas @@ -62,8 +62,8 @@ type procedure AddNameSpace(Name:string);override; procedure DelNameSpace(Name:string);override; - procedure AddType(NameSpace:string;Name:string;&Type:TRTBType);override; - procedure DelType(NameSpace:string;Name:string);override; + procedure AddType(NameSpace:string;Name:string;&Type:TRTBType);override;//- + procedure DelType(NameSpace:string;Name:string);override;//- procedure AddConst(NameSpace:string;Name:string;Val:TValue);override; procedure DelConst(NameSpace:string;Name:string);override; @@ -72,6 +72,9 @@ type procedure ExportVariable(NameSpace:string;Name:string;var Data);override; procedure DelVariable(NameSpace:string;Name:string);override; + procedure AddCallBack(NameSpace:string;Name:string;CallBack:TRTBCallBack);override;//- + procedure DelCallBack(NameSpace:string;Name:string);override;//- + procedure &Register(NameSpace:string;Name:string;&Type:TRTBType);override; procedure UnRegister(NameSpace:string;Name:string);override; procedure RegisterFunction(NameSpace:string;Name:string);override; @@ -298,6 +301,14 @@ begin DelConst(NameSpace,Name); end; +procedure TRTBFasmCompiler.TRTBFasmSource.AddCallBack(NameSpace:string;Name:string;CallBack:TRTBCallBack); +begin +end; + +procedure TRTBFasmCompiler.TRTBFasmSource.DelCallBack(NameSpace:string;Name:string); +begin +end; + procedure TRTBFasmCompiler.TRTBFasmSource.&Register(NameSpace:string;Name:string;&Type:TRTBType); begin if NameSpace<>'' then diff --git a/Source/RuntimeBuilder.Lua.pas b/Source/RuntimeBuilder.Lua.pas index 05d6e26..5f260dd 100644 --- a/Source/RuntimeBuilder.Lua.pas +++ b/Source/RuntimeBuilder.Lua.pas @@ -17,7 +17,7 @@ type private //p:Pointer; public - //constructor Create(p:Pointer); + constructor Create(s:string); //function Call(OutType:PTypeInfo;args:TArray;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;override; //destructor Destroy;override; end; @@ -597,19 +597,9 @@ function TRTBLuaCompiler.TRTBLuaSource.Compilate:TRTBModule; var templib,PreDecl:string; i,sb:NativeUInt; - FuncDict:TDictionary; RegVarDict:TDictionary>; p:pointer; begin -//FuncDict:=TDictionary.Create(); -with funcs do - if Count<>0 then - for i:=0 to Count-1 do - begin - PreDecl:=PreDecl+Strings[i]+sLineBreak; - FuncDict.Add(Strings[i],base); - inc(base,SizeOf(pointer)); - end; {RegVarDict:=TDictionary>.Create(); with regvars do if Count<>0 then @@ -625,7 +615,7 @@ with consts do with Items[i] do ConstParse(Key,Value,PreDecl,base);} -//Result:=TRTBFasmModule.Create(p,Res.sb,FuncDict,RegVarDict); +Result:=TRTBLuaModule.Create(FText,funcs); end; destructor TRTBLuaCompiler.TRTBLuaSource.Destroy; diff --git a/Source/RuntimeBuilder.pas b/Source/RuntimeBuilder.pas index ca7d121..16308ab 100644 --- a/Source/RuntimeBuilder.pas +++ b/Source/RuntimeBuilder.pas @@ -28,6 +28,9 @@ type 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; @@ -69,6 +72,9 @@ type 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;//регистрирует функцию объявленную в скрипте diff --git a/Tests/Unit1.pas b/Tests/Unit1.pas index 9c79515..d07cf4f 100644 --- a/Tests/Unit1.pas +++ b/Tests/Unit1.pas @@ -84,7 +84,7 @@ Src.RegisterFunction('','main'); Module:=Src.Compilate; Func1:=Module.Funtion['main']; //Func2:=Module.Funtion['varmain']; -if 454<>Func1.Call(TypeInfo(integer),[454],CRTBCallTypeStdCall).AsInteger then +if 1<>Func1.Call(TypeInfo(integer),[454],CRTBCallTypeStdCall).AsInteger then raise Exception.Create('Error in LuaTest'); //Var1:=Module.&Var['Pmain']; //Var1.Val:=424;