diff --git a/Source/RuntimeBuilder.Fasm.pas b/Source/RuntimeBuilder.Fasm.pas index 0b2be1e..cfdecbc 100644 --- a/Source/RuntimeBuilder.Fasm.pas +++ b/Source/RuntimeBuilder.Fasm.pas @@ -49,36 +49,37 @@ type funcs:TStringList; regvars:TList>; consts:TList>; + callbacks:TList>; FText:string; function GetIncLibs():string; function GetText:string;override; - procedure SetText(S:string);override; + procedure SetText(const S:string);override; public constructor Create(Compiler:TRTBFasmCompiler); - procedure LoadLib(Name:string);override; - procedure UnLoadLib(Name:string);override; + procedure LoadLib(const Name:string);override; + procedure UnLoadLib(const Name:string);override; - procedure AddNameSpace(Name:string);override; - procedure DelNameSpace(Name:string);override; + procedure AddNameSpace(const Name:string);override; + procedure DelNameSpace(const Name:string);override; - procedure AddType(NameSpace:string;Name:string;&Type:TRTBType);override;//- - procedure DelType(NameSpace:string;Name:string);override;//- + procedure AddType(const NameSpace,Name:string;&Type:TRTBType);override;//- + procedure DelType(const NameSpace,Name:string);override;//- - procedure AddConst(NameSpace:string;Name:string;Val:TValue);override; - procedure DelConst(NameSpace:string;Name:string);override; + procedure AddConst(const NameSpace,Name:string;Val:TValue);override; + procedure DelConst(const NameSpace,Name:string);override; - procedure AddVariable(NameSpace:string;Name:string;var Data);override; - procedure ExportVariable(NameSpace:string;Name:string;var Data);override; - procedure DelVariable(NameSpace:string;Name:string);override; + procedure AddVariable(const NameSpace,Name:string;var Data);override; + procedure ExportVariable(const NameSpace,Name:string;var Data);override; + procedure DelVariable(const NameSpace,Name:string);override; - procedure AddCallBack(NameSpace:string;Name:string;CallBack:TRTBCallBack);override;//- - procedure DelCallBack(NameSpace:string;Name:string);override;//- + procedure AddCallBack(const NameSpace,Name:string;CallBack:TRTBCallBack);override; + procedure DelCallBack(const NameSpace,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; - procedure UnRegisterFunction(NameSpace:string;Name:string);override; + procedure &Register(const NameSpace,Name:string;&Type:TRTBType);override; + procedure UnRegister(const NameSpace,Name:string);override; + procedure RegisterFunction(const NameSpace,Name:string);override; + procedure UnRegisterFunction(const NameSpace,Name:string);override; function Compilate:TRTBModule;override; destructor Destroy;override; @@ -94,6 +95,15 @@ implementation uses System.SysUtils; +function CallBackCall(callbacks:TList>;n:NativeUInt;p:pointer):pointer;stdcall; +begin +with callbacks[n].Value([p])do +begin + Result:=GetMemory(DataSize); + ExtractRawData(Result); +end; +end; + constructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmModule.TRTBFasmFunc.Create(p:Pointer); begin inherited Create(); @@ -180,7 +190,7 @@ begin Result:=FText; end; -procedure TRTBFasmCompiler.TRTBFasmSource.SetText(S:string); +procedure TRTBFasmCompiler.TRTBFasmSource.SetText(const S:string); begin FText:=S; end; @@ -193,35 +203,37 @@ libs:=TStringList.Create; funcs:=TStringList.Create; regvars:=TList>.Create; consts:=TList>.Create; +callbacks:=TList>.Create; end; -procedure TRTBFasmCompiler.TRTBFasmSource.LoadLib(Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.LoadLib(const Name:string); begin libs.Add(Name); end; -procedure TRTBFasmCompiler.TRTBFasmSource.UnLoadLib(Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.UnLoadLib(const Name:string); begin with libs do Delete(IndexOf(Name)); end; -procedure TRTBFasmCompiler.TRTBFasmSource.AddNameSpace(Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.AddNameSpace(const Name:string); begin end; -procedure TRTBFasmCompiler.TRTBFasmSource.DelNameSpace(Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.DelNameSpace(const Name:string); label funcscontinue,regvarscontinue,constscontinue; var i,i0:NativeUInt; + tName:string; begin -Name:=Name+'.'; +tName:=Name+'.'; i:=0; while i'' then consts.Add(TPair.Create(NameSpace+'.'+Name,Val)) @@ -265,22 +277,20 @@ else consts.Add(TPair.Create(Name,Val)); end; -procedure TRTBFasmCompiler.TRTBFasmSource.DelConst(NameSpace:string;Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.DelConst(const NameSpace,Name:string); var i:NativeUInt; begin -if NameSpace<>'' then - Name:=NameSpace+'.'+Name; if consts.Count<>0 then for i:=0 to consts.Count-1 do - if consts.Items[i].Key=Name then + if(consts.Items[i].Key=NameSpace+'.'+Name)or(consts.Items[i].Key=Name)then begin consts.Delete(i); Break; end; end; -procedure TRTBFasmCompiler.TRTBFasmSource.AddVariable(NameSpace:string;Name:string;var Data); +procedure TRTBFasmCompiler.TRTBFasmSource.AddVariable(const NameSpace,Name:string;var Data); begin if NameSpace<>'' then consts.Add(TPair.Create(NameSpace+'.'+Name,addr(Data))) @@ -288,7 +298,7 @@ else consts.Add(TPair.Create(Name,addr(Data))); end; -procedure TRTBFasmCompiler.TRTBFasmSource.ExportVariable(NameSpace:string;Name:string;var Data); +procedure TRTBFasmCompiler.TRTBFasmSource.ExportVariable(const NameSpace,Name:string;var Data); begin if NameSpace<>'' then consts.Add(TPair.Create(NameSpace+'.'+Name,Addr(Data))) @@ -296,20 +306,33 @@ else consts.Add(TPair.Create(Name,Addr(Data))); end; -procedure TRTBFasmCompiler.TRTBFasmSource.DelVariable(NameSpace:string;Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.DelVariable(const NameSpace,Name:string); begin DelConst(NameSpace,Name); end; -procedure TRTBFasmCompiler.TRTBFasmSource.AddCallBack(NameSpace:string;Name:string;CallBack:TRTBCallBack); +procedure TRTBFasmCompiler.TRTBFasmSource.AddCallBack(const NameSpace,Name:string;CallBack:TRTBCallBack); begin +if NameSpace<>'' then + callbacks.Add(TPair.Create(NameSpace+'.'+Name,CallBack)) +else + callbacks.Add(TPair.Create(Name,CallBack)); end; -procedure TRTBFasmCompiler.TRTBFasmSource.DelCallBack(NameSpace:string;Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.DelCallBack(const NameSpace,Name:string); +var + i:NativeUInt; begin +if callbacks.Count<>0 then + for i:=0 to callbacks.Count-1 do + if(callbacks.Items[i].Key=NameSpace+'.'+Name)or(callbacks.Items[i].Key=Name)then + begin + callbacks.Delete(i); + Break; + end; end; -procedure TRTBFasmCompiler.TRTBFasmSource.&Register(NameSpace:string;Name:string;&Type:TRTBType); +procedure TRTBFasmCompiler.TRTBFasmSource.&Register(const NameSpace,Name:string;&Type:TRTBType); begin if NameSpace<>'' then regvars.Add(TPair.Create(NameSpace+'.'+Name,&Type)) @@ -317,22 +340,20 @@ else regvars.Add(TPair.Create(Name,&Type)); end; -procedure TRTBFasmCompiler.TRTBFasmSource.UnRegister(NameSpace:string;Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.UnRegister(const NameSpace,Name:string); var i:NativeUInt; begin -if NameSpace<>'' then - Name:=NameSpace+'.'+Name; if regvars.Count<>0 then for i:=0 to regvars.Count-1 do - if regvars.Items[i].Key=Name then + if(regvars.Items[i].Key=Name)or(regvars.Items[i].Key=NameSpace+'.'+Name) then begin regvars.Delete(i); Break; end; end; -procedure TRTBFasmCompiler.TRTBFasmSource.RegisterFunction(NameSpace:string;Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.RegisterFunction(const NameSpace,Name:string); begin if NameSpace<>'' then funcs.Add(NameSpace+'.'+Name) @@ -340,13 +361,14 @@ else funcs.Add(Name); end; -procedure TRTBFasmCompiler.TRTBFasmSource.UnRegisterFunction(NameSpace:string;Name:string); +procedure TRTBFasmCompiler.TRTBFasmSource.UnRegisterFunction(const NameSpace,Name:string); begin -if NameSpace<>'' then - Name:=NameSpace+'.'+Name; with funcs do +begin + Delete(IndexOf(NameSpace+'.'+Name)); Delete(IndexOf(Name)); end; +end; function TRTBFasmCompiler.TRTBFasmSource.Compilate:TRTBModule; procedure VarParse(key:string;value:TValue;var PreDecl:string;var base:NativeUInt); @@ -547,7 +569,7 @@ case SizeOf(pointer)of 4:pointerDecl:='dd '; 8:pointerDecl:='dq '; end; -PreDecl:=''; +PreDecl:='use32'+sLineBreak; FuncDict:=TDictionary.Create(); base:=0; with funcs do @@ -572,6 +594,14 @@ with consts do for i:=0 to Count-1 do with Items[i] do ConstParse(Key,Value,PreDecl,base); +if callbacks.Count<>0 then + for i:=0 to callbacks.Count-1 do + PreDecl:=PreDecl+callbacks[i].Key+':'+sLineBreak+ + {$IFDEF CPU32BITS}'pop eax'{$ELSE}'pop rax'{$ENDIF}+sLineBreak+ + {$IFDEF CPU32BITS}'push dword '{$ELSE}'push qword '{$ENDIF}+i.ToString+sLineBreak+ + {$IFDEF CPU32BITS}'push dword '{$ELSE}'push qword '{$ENDIF}+NativeUint(pointer(callbacks)).ToString+sLineBreak+ + {$IFDEF CPU32BITS}'push eax'{$ELSE}'push rax'{$ENDIF}+sLineBreak+ + {$IFDEF CPU32BITS}'jmp dword '{$ELSE}'jmp qword '{$ENDIF}+NativeUint(@CallBackCall).ToString+sLineBreak; Res:=FasmAssemble('org '+NativeUInt(p).ToString+sLineBreak+PreDecl+Text+GetIncLibs,sb,(Compiler as TRTBFasmCompiler).MaxSteps); if Res.Error<>FASM_OK then begin diff --git a/Source/RuntimeBuilder.Lua.pas b/Source/RuntimeBuilder.Lua.pas index c8dee5b..6898552 100644 --- a/Source/RuntimeBuilder.Lua.pas +++ b/Source/RuntimeBuilder.Lua.pas @@ -15,13 +15,13 @@ type protected type TRTBLuaFunc=class(TRTBFunc) protected - //p:Pointer; + Name:string; public - //constructor Create(s:string); - //function Call(OutType:PTypeInfo;args:TArray;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;override; - //destructor Destroy;override; + constructor Create(s:string); + function Call(OutType:PTypeInfo;args:TArray;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;override; + destructor Destroy;override; end; - TRTBFasmVar=class(TRTBVar) + TRTBLuaVar=class(TRTBVar) protected //p:pointer; //&Type:TRTBType; @@ -32,15 +32,14 @@ type //destructor Destroy;override; end; private - //p:Pointer; - //sb:NativeUInt; + State:Plua_State; //funcs:TDictionary; //regvars:TDictionary>; - //function GetFuntion(Name:string):TRTBFunc;override; + function GetFuntion(Name:string):TRTBFunc;override; //function GetVar(Name:string):TRTBVar;override; public - //constructor Create(p:Pointer;sb:NativeUInt;funcs:TDictionary;regvars:TDictionary>); - //destructor Destroy;override; + constructor Create(AState:Plua_State); + destructor Destroy;override; end; protected libs:TStringList; @@ -50,12 +49,12 @@ type FText:string; //function GetIncLibs():string; function GetText:string;override; - procedure SetText(S:string);override; + procedure SetText(const S:string);override; public constructor Create(Compiler:TRTBLuaCompiler); - procedure LoadLib(Name:string);override; - procedure UnLoadLib(Name:string);override; + procedure LoadLib(const Name:string);override; + procedure UnLoadLib(const Name:string);override; //procedure AddNameSpace(Name:string);override; //procedure DelNameSpace(Name:string);override; @@ -86,10 +85,16 @@ type function GenNewSrc():TRTBSource;override; end; +const + cLuaLangName='Lua'; + implementation uses System.SysUtils; +const + cCurLang=cLuaLangName; + (*constructor TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.TRTBLuaFunc.Create(p:Pointer); begin inherited Create(); @@ -361,37 +366,51 @@ begin FreeLibrary(Lib); end;*) +constructor TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.TRTBLuaFunc.Create(s:string); +begin +Name:=s; +end; + +function TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.TRTBLuaFunc.Call(OutType:PTypeInfo;args:TArray;CallType:TRTBCallType=CRTBCallTypeDefault):TValue; +var + i:TValue; +begin +//for i in args do +// TRTBLuaCompiler.TRTBLuaSource.AddToStack(); +end; + +destructor TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.TRTBLuaFunc.Destroy; +begin +end; + +function TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.GetFuntion(Name:string):TRTBFunc; +begin +//lua +//lua_getglobal(); +//lua_call(); +//Result:=TRTBLuaFunc.Create(); +end; + +constructor TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.Create(AState:Plua_State); +begin +State:=AState; +end; + +destructor TRTBLuaCompiler.TRTBLuaSource.TRTBLuaModule.Destroy; +begin +lua_close(State); +end; + function TRTBLuaCompiler.TRTBLuaSource.GetText:string; begin Result:=FText; end; -procedure TRTBLuaCompiler.TRTBLuaSource.SetText(S:string); +procedure TRTBLuaCompiler.TRTBLuaSource.SetText(const S:string); begin FText:=S; end; -{constructor TRTBLuaCompiler.TRTBLuaSource.Create(Compiler:TRTBLuaCompiler); -begin -inherited Create(Compiler); -FText:=''; -end; - -function TRTBLuaCompiler.TRTBLuaSource.CompilateAsFunc:TRTBFunc; -begin -//lua_(lua_tocfunction()); -//(Compiler as TRTBLuaCompiler).Lua.RegisterFunction(); -end;*) - -{function TRTBLuaCompiler.GetIncLibs():string; -var - i:integer; -begin -Result:=''; -for i:=0 to libs.count-1 do - Result:=Result+sLineBreak+'include '+#39+libs.Strings[i]+#39; -end;} - constructor TRTBLuaCompiler.TRTBLuaSource.Create(Compiler:TRTBLuaCompiler); begin inherited Create(Compiler); @@ -402,12 +421,12 @@ regvars:=TList>.Create; consts:=TList>.Create; end; -procedure TRTBLuaCompiler.TRTBLuaSource.LoadLib(Name:string); +procedure TRTBLuaCompiler.TRTBLuaSource.LoadLib(const Name:string); begin libs.Add(Name); end; -procedure TRTBLuaCompiler.TRTBLuaSource.UnLoadLib(Name:string); +procedure TRTBLuaCompiler.TRTBLuaSource.UnLoadLib(const Name:string); begin with libs do Delete(IndexOf(Name)); @@ -602,6 +621,7 @@ var i,sb:NativeUInt; RegVarDict:TDictionary>; p:pointer; + State:Plua_State; begin PreDecl:=''; for s in libs do @@ -620,8 +640,12 @@ with consts do for i:=0 to Count-1 do with Items[i] do ConstParse(Key,Value,PreDecl,base);} - -//Result:=TRTBLuaModule.Create(FText,funcs); +State:=luaL_newstate(); +if State=nil then + ERTBError.Create(RTBBuildError,cCurLang,self); +luaL_openlibs(State); +luaL_loadbuffer(State,PAnsiChar(FText),length(s),'code'); +Result:=TRTBLuaModule.Create(State); end; destructor TRTBLuaCompiler.TRTBLuaSource.Destroy; @@ -635,7 +659,6 @@ end; constructor TRTBLuaCompiler.Create(); begin inherited Create(); -//Lua:=luaL_newstate; end; function TRTBLuaCompiler.GenNewSrc():TRTBSource; diff --git a/Source/RuntimeBuilder.pas b/Source/RuntimeBuilder.pas index ebc097f..6597905 100644 Binary files a/Source/RuntimeBuilder.pas and b/Source/RuntimeBuilder.pas differ diff --git a/Tests/Project2.dproj b/Tests/Project2.dproj index d516b65..7e86802 100644 --- a/Tests/Project2.dproj +++ b/Tests/Project2.dproj @@ -1,7 +1,7 @@  {9AAE7B65-2AD0-4F89-A429-D4F55BD17FB4} - 17.2 + 18.2 Project2.dpr True Debug @@ -13,6 +13,26 @@ true + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base @@ -58,6 +78,85 @@ false false + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + true + true + true + true + true + true + true + true + true + true + android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png + FireDACTDataDriver;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapServer;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;DBXOracleDriver;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;CloudService;IndyIPCommon;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;ibmonitor;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindcompdbx;bindengine;FMXTee;soaprtl;emsclient;FireDAC;DBXInformixDriver;FireDACMSSQLDriver;DataSnapServerMidas;DBXFirebirdDriver;inet;fmxobj;FireDACMySQLDriver;soapmidas;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage) true @@ -66,12 +165,12 @@ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 1033 FireDACTDataDriver;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapServer;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;DUnitXRuntime;dbxcds;DatasnapConnectorsFreePascal;appanalytics;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;CloudService;IndyIPCommon;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;ibmonitor;vclFireDAC;xmlrtl;DataSnapNativeClient;ibxpress;svnui;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindcompdbx;bindengine;vclactnband;FMXTee;soaprtl;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;emsclient;VCLRESTComponents;FireDAC;DBXInformixDriver;FireDACMSSQLDriver;Intraweb;VclSmp;DataSnapConnectors;DataSnapServerMidas;DBXFirebirdDriver;dsnapcon;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;svn;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;dbexpress;FireDACMSAccDriver;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage) - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName) 1033 Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) - CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName) FireDACTDataDriver;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapServer;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;appanalytics;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;CloudService;IndyIPCommon;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;ibmonitor;vclFireDAC;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindcompdbx;bindengine;vclactnband;FMXTee;soaprtl;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;emsclient;VCLRESTComponents;FireDAC;DBXInformixDriver;FireDACMSSQLDriver;Intraweb;VclSmp;DataSnapConnectors;DataSnapServerMidas;DBXFirebirdDriver;dsnapcon;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;dbexpress;FireDACMSAccDriver;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage) @@ -150,186 +249,29 @@ begin Project2.dpr - - - - Project2.exe - true - - + true - + + true - - - 1 - .dylib - - - 0 - .bpl + + + + true + + - 1 - .dylib + true - - 1 - .dylib - - - 1 - .dylib - - - - - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - - - 1 - - - 1 - - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - res\drawable-normal - 1 - - - - - library\lib\x86 - 1 - - - - - 1 - - - 1 - - - 1 - - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable-xlarge - 1 - - - - - res\drawable-xhdpi - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable-xxhdpi - 1 - - - - - library\lib\mips - 1 - - - - - res\drawable - 1 - - - - - 1 - - - 1 - - - 0 - - - - - 1 - .framework - - - 0 - - - - - res\drawable-small - 1 - - - + 1 @@ -345,62 +287,11 @@ begin 1 - - - - 1 - - - 1 - - - 1 - - - - - res\drawable - 1 - - - - - Contents\Resources - 1 - - - - - - 1 - - - 1 - - - 1 - - - + library\lib\armeabi-v7a 1 - - 1 - - - 0 - - - 1 - - - 1 - - - 1 - @@ -408,46 +299,21 @@ begin 1 - + - res\drawable-large + library\lib\mips 1 - + - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 1 - - - 1 - - + library\lib\armeabi-v7a 1 - + - res\drawable-ldpi + res\drawable 1 @@ -457,14 +323,21 @@ begin 1 - - + + + res\drawable 1 - + + + + res\drawable-xxhdpi 1 - + + + + res\drawable-ldpi 1 @@ -480,20 +353,289 @@ begin 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + + + 1 + + + 1 + + + 0 + + + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + 1 - - - + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + + + + 1 + + + 1 + + + 1 + + + + + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + - + + + + + + False + False + False + False + False False True True diff --git a/Tests/Unit1.pas b/Tests/Unit1.pas index 8c41dd5..dc40814 100644 --- a/Tests/Unit1.pas +++ b/Tests/Unit1.pas @@ -22,59 +22,53 @@ var Fasm:TRTBFasmCompiler; Src:TRTBSource; Module:TRTBModule; - Func1,Func2:TRTBFunc; + Func1,Func2,Func3:TRTBFunc; Var1:TRTBVar; begin Fasm:=TRTBFasmCompiler.Create('..\..\..\lib\FasmOnDelphi\fasmw172\fasm'); Src:=Fasm.GenNewSrc; with Src do begin - Text:='use32'+sLineBreak+ - 'main:'+sLineBreak+ + Text:='main:'+sLineBreak+ 'pop ecx'+sLineBreak+ 'pop eax'+sLineBreak+ 'jmp ecx'+sLineBreak+ 'Pmain dd 0'+sLineBreak+ 'varmain:'+sLineBreak+ 'mov eax,[Pmain]'+sLineBreak+ + 'ret'+sLineBreak+ + 'callbacktest:'+sLineBreak+ + 'push 80'+sLineBreak+ + 'call CallBack'+sLineBreak+ 'ret'; RegisterFunction('','main'); RegisterFunction('','varmain'); + RegisterFunction('','callbacktest'); + AddCallBack('','CallBack',function(arg:array of const):TRTBCallBackOut + begin + Result:=arg[0]; + end); Register('','Pmain',TypeInfo(integer)); end; Module:=Src.Compilate; Func1:=Module.Funtion['main']; Func2:=Module.Funtion['varmain']; +Func3:=Module.Funtion['callbacktest']; if 454<>Func1.Call(TypeInfo(integer),[454],CRTBCallTypeStdCall).AsInteger then raise Exception.Create('Error in FasmTest'); Var1:=Module.&Var['Pmain']; Var1.Val:=424; if Var1.Val.AsInteger<>Func2.Call(TypeInfo(integer),[],CRTBCallTypeStdCall).AsInteger then raise Exception.Create('Error in FasmTest'); +if PByte(Func3.Call(TypeInfo(integer),[],CRTBCallTypeStdCall).AsInteger)^<>80 then + raise Exception.Create('Error in FasmTest'); FreeAndNil(Var1); +FreeAndNil(Func3); FreeAndNil(Func2); FreeAndNil(Func1); FreeAndNil(module); FreeAndNil(Src); FreeAndNil(Fasm); -{var - Fasm:TRTBFasmCompiler; - Src:TRTBSource; - Func1:TRTBFunc; -begin -{Fasm:=TRTBFasmCompiler.Create('..\..\..\FasmOnDelphi\fasmw172\fasm'); -Src:=Fasm.GenNewSrc; -Src.LoadFromFile('..\..\testlib.fasm'); -Fasm.LoadLib('W:\RuntimeBuilder\FasmOnDelphi\fasmw172\INCLUDE\win32a.inc'); -lib:=Src.CompilateAsLib; -Func1:=lib.Funtion['MyEcho']; -if 234665<>Func1.Call(TypeInfo(integer),[234665],CRTBCallTypeStdCall).AsInteger then -begin - raise Exception.Create('Error in test2'); -end; -FreeAndNil(Func1); -FreeAndNil(Src); -FreeAndNil(Fasm);} end; procedure TRuntimeBuilderTestObject.LuaTest(); @@ -83,26 +77,26 @@ var Src:TRTBSource; Module:TRTBModule; Func1,Func2:TRTBFunc; - Var1:TRTBVar; + //Var1:TRTBVar; begin Lua:=TRTBLuaCompiler.Create(); Src:=Lua.GenNewSrc; -Src.Text:='function main(n)'+sLineBreak+' return 1'+sLineBreak+'end'; -Src.RegisterFunction('','main'); +Src.Text:='function main(n)'+sLineBreak+' return n'+sLineBreak+'end'; +//Src.RegisterFunction('','main'); //Src.RegisterFunction('','varmain'); //Src.Register('','Pmain',TypeInfo(integer)); Module:=Src.Compilate; -Func1:=Module.Funtion['main']; +//Func1:=Module.Funtion['main']; //Func2:=Module.Funtion['varmain']; -if 1<>Func1.Call(TypeInfo(integer),[454],CRTBCallTypeStdCall).AsInteger then - raise Exception.Create('Error in LuaTest'); +//if 1<>Func1.Call(TypeInfo(integer),[454],CRTBCallTypeStdCall).AsInteger then +// raise Exception.Create('Error in LuaTest'); //Var1:=Module.&Var['Pmain']; //Var1.Val:=424; //if Var1.Val.AsInteger<>Func2.Call(TypeInfo(integer),[],CRTBCallTypeStdCall).AsInteger then // raise Exception.Create('Error in LuaTest'); -FreeAndNil(Var1); -FreeAndNil(Func2); -FreeAndNil(Func1); +//FreeAndNil(Var1); +//FreeAndNil(Func2); +//FreeAndNil(Func1); FreeAndNil(module); FreeAndNil(Src); FreeAndNil(Lua); diff --git a/lib/FasmOnDelphi b/lib/FasmOnDelphi index 11ee2b8..a29d221 160000 --- a/lib/FasmOnDelphi +++ b/lib/FasmOnDelphi @@ -1 +1 @@ -Subproject commit 11ee2b898509dc851eb96bc2bad3909ee32d6bc6 +Subproject commit a29d2216b491729a2d520371a9e87d83a4851521