Справочная информация: я программирую компилятор .NET (очень похожий на C #) для школьного проекта.Одна из возможностей, которую я сейчас пытаюсь добавить, - это рекурсия хвостового вызова в методах.
Дополнительная информация: В CIL «this» передается в методы экземпляра, как если бы это был просто еще один аргумент.Таким образом, при доступе к первому аргументу статического метода вы бы выдавали ldarg.0, но при доступе к первому аргументу метода экземпляра вы бы испускали ldarg.1, а доступ к «this» в методе экземпляра вы бы испускали ldarg.0,(Методы экземпляра даже больше похожи на методы расширения, чем я когда-либо себе представлял.)
Вопрос: Можете ли вы установить «this», используя starg.0 без каких-либо побочных эффектов?
Почему это под вопросом: Является или нет метод методом экземпляра, задается с помощью MethodBuilder, который является чем-то вроде черного ящика.Хотя «это» выглядит как любой другой аргумент, я знаю, что некоторые JIT-компиляторы отслеживают «это» отдельно и изменяют свое поведение в зависимости от этого значения.Если при установке «this» в методе экземпляра возникают побочные эффекты, то как их избежать?