I'm working on a game, and we have been storing our level information in JSON format. These levels are quite large, so we switched to just storing them in plain C#:
- A top level method has a switch statement for the name of the level/object
- There are several auto-generated methods that "new up" our object tree with standard property inititalizers
Example:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
Except these methods are very large and have nested lists/dictionaries of other objects, etc.
This has sped up the time of loading a level from 2-3 seconds to fractions of a second (on Windows). The size of our data is also considerable smaller, as compiled IL compared to JSON.
The problem is when we compile these in MonoDevelop for MonoTouch, we get:
mtouch exited with code 1
With -v -v -v
turned on, we can see the error:
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/monotouch.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/monotouch.dll"
AOT Compilation exited with code 134, command:
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/DrawAStickmanCore.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll"
Mono Ahead of Time compiler - compiling assembly /Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll
* Assertion: should not be reached at ../../../../../mono/mono/mini/mini-arm.c:2758
Is there a limit to the number of lines in a method, when compiling for AOT? Is there some argument we can pass to mtouch
to fix this? Some files work fine, but one in particular that causes the error has a 3,000 line method. Compiling for the simulator works fine no matter what.
This is still an experiment, so we realize this is a pretty crazy situation.