Компилятор MonoTouch AOT — большие методы не работают

Я работаю над игрой, и мы храним информацию об уровне в формате JSON. Эти уровни довольно велики, поэтому мы перешли к простому хранению их в простом C#:

  • Метод верхнего уровня имеет оператор switch для имени уровня/объекта
  • Существует несколько автоматически сгенерированных методов, которые " наше дерево объектов со стандартными инициализаторами свойств

Пример:

private OurObject Autogenerated_Object1()
{
   return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}

За исключением того, что эти методы очень большие и имеют вложенные списки/словари других объектов и т. д.

Это ускорило время загрузки уровня с 2- от 3 секунд до долей секунды (в Windows). Размер наших данных также значительно меньше, поскольку скомпилированный IL по сравнению с JSON.

Проблема в том, что когда мы скомпилируем их в MonoDevelop для MonoTouch, мы получим:

mtouch завершил работу с кодом 1

При включенном -v -v -vмы можем увидеть ошибку :

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

Есть ли ограничение на количество строк в методе при компиляции для AOT? Есть ли какой-то аргумент, который мы можем передать mtouch, чтобы исправить это? Некоторые файлы работают нормально, но один, в частности, который вызывает ошибку, имеет метод 3000 строк. Компиляция для симулятора работает нормально несмотря ни на что.

Это все еще эксперимент, так что мы понимаем, что это довольно сумасшедшая ситуация.

7
задан jonathanpeppers 15 May 2012 в 15:27
поделиться