При обновлении моего проекта до последней версии Нитры проект перестал компилироваться с ошибкой:
2>C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): error : internal compiler error: got some unknown exception of type System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
2> в DotNet.AstUtils.ResolveAll[TSymbol,TRef](ImmutableArray`1 refs, Builder& result)
2> в DotNet.AstUtils.MakeConstructedType(ILocated ast, ImmutableArray`1 args, DependentPropertyEvalContext context)
2> в DotNet.QualifiedReference.Generic.EvalProperties(DependentPropertyEvalContext context)
2> в Nitra.Ast.AstMembers.AstDependentProperty.EvalProperties(DependentPropertyEvalContext context)
2> в Nitra.Ast.AstMembers.AstMember.AstList.EvalProperties(DependentPropertyEvalContext context)
2> в Nitra.Ast.TopAst.EvalProperties(DependentPropertyEvalContext context)
2> в DotNet.NamespaceMember.AstList.EvalProperties(DependentPropertyEvalContext context)
2> в DotNet.ExplicitNamespace.EvalProperties(DependentPropertyEvalContext context)
2> в DotNet.NamespaceMember.AstList.EvalProperties(DependentPropertyEvalContext context)
2> в DotNet.CompilationUnit.EvalProperties(DependentPropertyEvalContext context)
2> в Nitra.Declarations.EvalPropertiesHost.EvalProperties(DependentPropertyEvalContext context, IDependentPropertyContainer obj, Single statistics)
2> в Nitra.Declarations.ProjectEvalPropertiesHost.ExecutePass(DependentPropertyEvalContext context, String passName)
2> в Nitra.Declarations.EvalPropertiesHost.EvalProperties(DependentPropertyEvalContext context, String passName, Int32 stage)
2> в DotNet.CompilationUnit.RefreshProject(CancellationToken cancellationToken, ImmutableArray`1 files, Object data)
2> в Nitra.ProjectSystem.Project.UpdateProperties(CancellationToken cancellationToken)
2> в Nitra.Compiler.CompilingNitraProject.BeforeTypedMembers()
2> в Nemerle.Compiler.MacroColorizator.InGlobalColor(FunctionVoid fn)
2> в Nitra.InvokeNitraCompiler_assembly_preaddMacro.Run(Typer _N__1, list`1 parms)
2> в Nemerle.Compiler.TypesManager.AttributeMacroExpansion.Expand()
2> в Nemerle.Compiler.TypesManager.ExpandMacros()
2> в Nemerle.Compiler.TypesManager.Run()
2> в Nemerle.Compiler.ManagerClass.Run()
2> в Nemerle.CommandlineCompiler.MainClass.main_with_catching()
2>Done building project "Igor.Grammar.nproj" -- FAILED.
Последняя ревизия Нитры с которой все работает — 09ead507c498e93e5e0e696391904e8b5746a90b 10.12.2016 4:30:04 Refactoring of UnionScope
Если я комментирую все декларации в нитра-файлах, кроме CompilationUnit, то проект естественно не компилируется, но ice нет. Но стоит раскомментировать что-то еще — и сразу ice.
Здравствуйте, VladD2, Вы писали:
VD>Если можно пришли мне проект по почте vlad@rsdn.org.
Послал. Там, конечно, местами тот еще трэш.
VD>Завтра попробую разобраться.
Спасибо!
VD>Ну, а пока надо откатиться до рабочей версии.
Конечно. Но уж очень не терпится опробовать плагин к студии.
VD>Еще надо проверить какая версия Немерла используется. Желательно использовать последнюю.
Проблема воспроизводится со всеми последними версиями nemerle: 1.2.516, 1.2.518 и 1.2.522 (последняя на nemerle.org)
VD>Да, комит следующий за 09ead507c498e93e5e0e696391904e8b5746a90b уже не работает? Другими словами именно следующий комит сломан?
Сейчас проверил точнее.
09ead507c498e93e5e0e696391904e8b5746a90b 10.12.2016 4:30:04 Refactoring of UnionScope — ОК
9a5f43b9f3153a11b9cd64528dbbe6411f3660b8 10.12.2016 16:46:34 Refactoring — ОК
6984c9f079a4e2c429af5dcc142432a321a796ce 13.12.2016 0:48:58 Refactoring (use ImmutableArray) — Не компилируется сама Нитра
06702e09626b758f1f099bfe0445eab7d5d0b78b 13.12.2016 0:50:03 Add IProjectSupport.DeconstructType() method. — Нитра компилируется, в моем проекте ICE
VD>Еще хорошо бы понять что в действителности равно null.
Здравствуйте, VladD2, Вы писали:
VD>Что-то ни фига не пришло. VD>Попробуй, может, на Яндекс: vladdq@ya.ru
Да, не заметил что письмо вернулось. На всякий случай вместо аттачмента отправил ссылку на google drive.
_>>09ead507c498e93e5e0e696391904e8b5746a90b 10.12.2016 4:30:04 Refactoring of UnionScope — ОК _>>9a5f43b9f3153a11b9cd64528dbbe6411f3660b8 10.12.2016 16:46:34 Refactoring — ОК _>>6984c9f079a4e2c429af5dcc142432a321a796ce 13.12.2016 0:48:58 Refactoring (use ImmutableArray) — Не компилируется сама Нитра _>>06702e09626b758f1f099bfe0445eab7d5d0b78b 13.12.2016 0:50:03 Add IProjectSupport.DeconstructType() method. — Нитра компилируется, в моем проекте ICE
VD>Т.е. проблема в 06702e09626b758f1f099bfe0445eab7d5d0b78b?
Да, либо в 06702e09626b758f1f099bfe0445eab7d5d0b78b либо в предыдущем (6984c9f079a4e2c429af5dcc142432a321a796ce) — его проверить не удалось, так как нитра не скомпилировалась.
Здравствуйте, VladD2, Вы писали:
VD>Еще хорошо бы понять что в действителности равно null.
Выяснить это мне так и не удалось. Но хорошая новость оказалась в том, что проблема воспроизводится только на релизной сборке Нитры. На дебажной все компилируется.
Попробовал собрать интеграцию для своего языка, все заработало, очень круто, спасибо.
Но есть проблема. Если я открываю файл вне проекта или файл, включенный в какой-либо проект не с build action Compile, то в логе интеграции появляется эксепшн Can't find file with id=xxx, и интеграция не работает.
Если я ставлю build action Compile, то интеграция работает, а вот проект не компилируется (мой файл пытается скомпилироваться как немерле или C# код, в зависимости от типа проекта).
В проекте Немерле я могу выставить build action Nitra, тогда все ок. Но есть ли способ получить работающую интеграцию пользовательского языка внутри C# проекта? У пользователя может не быть установлен Nemerle, да и в моем случае логично подключать файлы именно к C#-проекту, так как из него генерируется целевой C# код.
В идеале хотелось бы чтобы интеграция — как минимум подсветка синтаксиса — работала и для файлов вне проекта тоже.. Это возможно?
Здравствуйте, meadow_meal, Вы писали:
_>При обновлении моего проекта до последней версии Нитры проект перестал компилироваться с ошибкой:
Наконец то дошли руки до твоего проекта.
После некоторых правок (замены длл-ей на свежие, правки референсов на относительные и исправления явно не верно заданного свойства DocumentationFile в одном из проектов) все скомпилировалось без ошибок.
Единственное, что — не вызывается батник merge.cmd:
Здравствуйте, meadow_meal, Вы писали:
_>Выяснить это мне так и не удалось. Но хорошая новость оказалась в том, что проблема воспроизводится только на релизной сборке Нитры. На дебажной все компилируется.
Хм. У меня релизной и нет.
_>Попробовал собрать интеграцию для своего языка, все заработало, очень круто, спасибо.
Здорово!
_>Но есть проблема. Если я открываю файл вне проекта или файл, включенный в какой-либо проект не с build action Compile, то в логе интеграции появляется эксепшн Can't find file with id=xxx, и интеграция не работает.
Я знаю эту проблему. Как раз хотел заняться этим, но вот отвлекся на другие вещи. В ближайшее время поправлю.
_>Если я ставлю build action Compile, то интеграция работает, а вот проект не компилируется (мой файл пытается скомпилироваться как немерле или C# код, в зависимости от типа проекта).
_>В проекте Немерле я могу выставить build action Nitra, тогда все ок. Но есть ли способ получить работающую интеграцию пользовательского языка внутри C# проекта? У пользователя может не быть установлен Nemerle, да и в моем случае логично подключать файлы именно к C#-проекту, так как из него генерируется целевой C# код.
Тут вопрос о том какая реакция нужна. Если достаточно поддержки интеграции, то используй BuildAction Nitra.
BuildAction Nitra будет работать и внутри C#-проекта. Только надо вначале заменить один тег "<Compile ..." на "<Nitra ...". Далее шарповская интеграция позволит выбирать его прямо в gui.
Ну, и можно подхачить проектный файл и перехватить обработку требуемых файлов.
_>В идеале хотелось бы чтобы интеграция — как минимум подсветка синтаксиса — работала и для файлов вне проекта тоже.. Это возможно?
Можно. На недели сделаю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.