Próbuję napisać własną zabawkę Mój język zabawki -> kompilator MSIL, aby lepiej zrozumieć działanie kompilatorów. Mam do czynienia z analizą i leksem, zbudowałem drzewa ekspresji i używając API drzewa wyrażeń System.Linq.Expressions, mam działającego interpretera. Teraz chciałbym wyemitować niektóre prawdziwe zestawy MSIL.Łączenie drzewa wyrażenia .NET w nowy zespół
Problem polega na tym, że nie mogę wymyślić, jak faktycznie zbudować te zespoły. Klasa MethodBuilder akceptuje tylko surowe bryły metod MSIL, więc muszę uzyskać surowy MSIL mojego drzewa wyrażeń. Wywołanie Expression.Compile() zwraca delegowanego delegata, ale nie jestem w stanie uzyskać jego bazowego MSIL. Wywołanie MethodInfo.GetMethodBody() zgłasza wyjątek InvalidOperationException, ponieważ nie jest zaimplementowany w tej konkretnej klasie podrzędnej.
Jak mogę połączyć tego delegata z nowym zestawem?
Należy pamiętać, że ta metoda ma pewne ograniczenia, takie jak niezdolność do kompilacji metod niestatycznych. –
@ 280Z28: Na szczęście język My Toy Language nie jest zorientowany obiektowo, więc nie będzie problemu. –
Czy możesz wyjaśnić, jak uzyskać odpowiedni "MethodBuilder" - zdaję sobie sprawę, że to było dawno temu :) –