Sto cercando di scrivere il mio giocattolo My Toy Language -> compilatore MSIL per avere una migliore comprensione di come funzionano i compilatori. Ho ottenuto l'analisi e il lexing funzionante, ho creato gli alberi delle espressioni e utilizzando l'API dell'albero delle espressioni System.Linq.Expressions, ho un interprete funzionante. Ora vorrei emettere alcuni veri assembly MSIL.Collegamento di un albero di espressioni .NET a un nuovo assieme
Il problema è che non riesco a capire come effettivamente costruire questi assembly. La classe MethodBuilder accetta solo corpi di metodo MSIL non elaborati, quindi devo ottenere il grezzo MSIL del mio albero di espressioni. Chiamando Expression.Compile() restituisce un delegato di lavoro ma non riesco a ottenere il suo MSIL sottostante. La chiamata a MethodInfo.GetMethodBody() genera un'eccezione InvalidOperationException poiché non è implementata in quella specifica classe figlio.
Come posso collegare il delegato a un nuovo assieme?
Tenere presente che questo metodo presenta alcune limitazioni, ad esempio l'impossibilità di compilare metodi non statici. –
@ 280Z28: Fortunatamente, My Toy Language non è orientato agli oggetti, quindi non sarà un problema. –
Puoi spiegare come ottenere l'appropriato 'MethodBuilder' - Mi rendo conto che è stato tanto tempo fa :) –