<div dir="ltr">I've been trying to port the F# Interactive to run directly on android.<div><br></div><div style>I have a package that loads under android and can generate IL but it fails with an assertion (presumable in the JIT compiler, but I'm not 100% sure).</div>
<div style><br></div><div style>The app source can be found here:</div><div style><a href="https://github.com/robertpi/fsiandroid">https://github.com/robertpi/fsiandroid</a><br></div><div style><br></div><div style>You need the latest Xamarian Studio updates from beta channel to build and run it. You always need a new line the program you enter, or the compiler refuses to run (not sure why). I've been testing with the following snippet:</div>
<div style>"let x = ""</div><div style>"</div><div style><br></div><div style>I seem to have enter the program twice before it compiles and executes, not sure why, working on finding this out myself.</div>
<div style><br></div><div style>I tried grab the IL code generated, but for some reason it always gets truncated in the log.</div><div style><br></div><div style>The program fails with the following stack trace:</div><div style>
<div>06-15 12:22:33.666 F/        ( 5381): * Assertion: should not be reached at /Users/builder/data/lanes/monodroid-mlion-master/f6831347/source/mono/mono/mini/mini-arm.c:3599</div><div>06-15 12:22:33.666 E/mono-rt ( 5381): Stacktrace:</div>
<div>06-15 12:22:33.666 E/mono-rt ( 5381): </div><div>06-15 12:22:33.666 E/mono-rt ( 5381):   at <unknown> <0xffffffff></div><div>06-15 12:22:33.666 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompiler.ProcessInputs (Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState,Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Compiler.Ast/ParsedInput>,bool,bool,bool,Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Compiler.Ast/Ident>) [0x005d7] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1000</div>
<div>06-15 12:22:33.676 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompiler.EvalParsedDefinitions (Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState,bool,bool,Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Compiler.Ast/SynModuleDecl>) [0x0006a] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1042</div>
<div>06-15 12:22:33.676 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/clo@1714-498.Invoke (Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState) [0x0061c] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1721</div>
<div>06-15 12:22:33.676 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiInteractionProcessor.InteractiveCatch<a> (Microsoft.FSharp.Core.FSharpFunc`2<a, System.Tuple`2<a, Microsoft.FSharp.Compiler.Interactive.Shell/FsiInteractionStepStatus>>,a) [0x0000e] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1667</div>
<div>06-15 12:22:33.686 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiInteractionProcessor.ExecInteraction (bool,Microsoft.FSharp.Compiler.Build/TcConfig,Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState,Microsoft.FSharp.Compiler.Ast/ParsedFsiInteraction) [0x00000] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1714</div>
<div>06-15 12:22:33.686 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiInteractionProcessor.ExecInteractions (bool,Microsoft.FSharp.Compiler.Build/TcConfig,Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState,Microsoft.FSharp.Core.FSharpOption`1<Microsoft.FSharp.Compiler.Ast/ParsedFsiInteraction>) [0x00231] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1830</div>
<div>06-15 12:22:33.686 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiInteractionProcessor.MainThreadProcessParsedInteraction (bool,Microsoft.FSharp.Core.FSharpOption`1<Microsoft.FSharp.Compiler.Ast/ParsedFsiInteraction>,Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState) [0x0004f] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1853</div>
<div>06-15 12:22:33.686 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/res@1915-17.Invoke (Microsoft.FSharp.Compiler.Interactive.Shell/FsiDynamicCompilerState) [0x00000] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:1915</div>
<div>06-15 12:22:33.696 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/runCodeOnMainThread@2165-1.Invoke (Microsoft.FSharp.Core.Unit) [0x00019] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:2168</div><div>06-15 12:22:33.706 E/mono-rt ( 5381):   at <StartupCode$FSharp-Compiler-Mono-Android>.$Fsiaux/Microsoft-FSharp-Compiler-Interactive-IEventLoop-Invoke@58-1.Invoke (Microsoft.FSharp.Core.Unit) [0x00000] in C:\code\fsharp\src\fsharp\fsiaux.fs:58</div>
<div>06-15 12:22:33.706 E/mono-rt ( 5381):   at <StartupCode$FSharp-Compiler-Mono-Android>.$Fsiaux/run@49-6.Invoke (Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit, object>) [0x0000d] in C:\code\fsharp\src\fsharp\fsiaux.fs:49</div>
<div>06-15 12:22:33.706 E/mono-rt ( 5381):   at Microsoft.FSharp.Primitives.Basics.List.iter<T> (Microsoft.FSharp.Core.FSharpFunc`2<T, Microsoft.FSharp.Core.Unit>,Microsoft.FSharp.Collections.FSharpList`1<T>) <IL 0x0001b, 0x000e7></div>
<div>06-15 12:22:33.706 E/mono-rt ( 5381):   at Microsoft.FSharp.Collections.ListModule.Iterate<T> (Microsoft.FSharp.Core.FSharpFunc`2<T, Microsoft.FSharp.Core.Unit>,Microsoft.FSharp.Collections.FSharpList`1<T>) <IL 0x00003, 0x0007f></div>
<div>06-15 12:22:33.706 E/mono-rt ( 5381):   at <StartupCode$FSharp-Compiler-Mono-Android>.$Fsiaux/run@47-2.Invoke (Microsoft.FSharp.Core.Unit) [0x00043] in C:\code\fsharp\src\fsharp\fsiaux.fs:49</div><div>06-15 12:22:33.706 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.SimpleEventLoop.Microsoft-FSharp-Compiler-Interactive-IEventLoop-Run () [0x0000e] in C:\code\fsharp\src\fsharp\fsiaux.fs:46</div>
<div>06-15 12:22:33.706 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/runLoop@2221.Invoke (Microsoft.FSharp.Core.Unit) [0x00061] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:2226</div><div>06-15 12:22:33.716 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell.DriveFsiEventLoop (Microsoft.FSharp.Compiler.Interactive.Shell/FsiConsoleOutput) [0x00000] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:2220</div>
<div>06-15 12:22:33.716 E/mono-rt ( 5381):   at Microsoft.FSharp.Compiler.Interactive.Shell/FsiEvaluationSession.Run () [0x00088] in C:\code\fsharp\src\fsharp\fsi\fsi.fs:2473</div><div>06-15 12:22:33.726 E/mono-rt ( 5381):   at <StartupCode$FSInteractiveAndroid>.$MainActivity/OnCreate@49.Invoke (Microsoft.FSharp.Core.Unit) [0x00000] in C:\code\FSIAndroid\FSInteractiveAndroid\MainActivity.fs:49</div>
<div>06-15 12:22:33.726 E/mono-rt ( 5381):   at Microsoft.FSharp.Control.AsyncBuilderImpl/callA@780.Invoke (Microsoft.FSharp.Control.AsyncParams`1<b>) <IL 0x00053, 0x0022b></div><div>06-15 12:22:33.726 E/mono-rt ( 5381):   at Microsoft.FSharp.Control.AsyncBuilderImpl/queueAsync@702.Invoke (Microsoft.FSharp.Core.Unit) <IL 0x00036, 0x00113></div>
<div>06-15 12:22:33.736 E/mono-rt ( 5381):   at <StartupCode$FSharp-Core>.$Control.loop@429-40 (Microsoft.FSharp.Control.Trampoline,Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Control.FakeUnitValue>) <IL 0x00003, 0x00073></div>
<div>06-15 12:22:33.746 E/mono-rt ( 5381):   at Microsoft.FSharp.Control.Trampoline.ExecuteAction (Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Control.FakeUnitValue>) <IL 0x0001a, 0x00177></div>
<div>06-15 12:22:33.746 E/mono-rt ( 5381):   at Microsoft.FSharp.Control.TrampolineHolder.Protect (Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Control.FakeUnitValue>) <IL 0x00039, 0x0018b></div>
<div>06-15 12:22:33.746 E/mono-rt ( 5381):   at <StartupCode$FSharp-Core>.$Control/-ctor@486-1.Invoke (object) <IL 0x00019, 0x000d7></div><div>06-15 12:22:33.746 E/mono-rt ( 5381):   at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <IL 0x00052, 0xffffffff></div>
<div>06-15 12:22:33.746 E/mono-rt ( 5381): </div><div>06-15 12:22:33.746 E/mono-rt ( 5381): =================================================================</div><div>06-15 12:22:33.746 E/mono-rt ( 5381): Got a SIGSEGV while executing native code. This usually indicates</div>
<div>06-15 12:22:33.746 E/mono-rt ( 5381): a fatal error in the mono runtime or one of the native libraries </div><div>06-15 12:22:33.746 E/mono-rt ( 5381): used by your application.</div><div>06-15 12:22:33.746 E/mono-rt ( 5381): =================================================================</div>
<div>06-15 12:22:33.746 E/mono-rt ( 5381): </div><div>06-15 12:22:33.886 D/Zygote  (   36): Process 5381 exited cleanly (255)</div><div><br></div></div><div style><br></div><div style>I've tried checking out mini-arm.c:3599, but it currently seems to be a comment. I'm not sure how you find the source for the version of Mono that Android is running on. Any help fixing this greatly appreciated.</div>
<div style><br></div><div style>Many thanks,</div><div style>Robert</div></div>