Clonage de méthode qui déconne..
Je clone des Types via System.Reflection.Emit.
Cela marche très bien pour à peu près n'importe quoi, sauf, apparemment, pour les méthodes qui retournent des valeurs.
Code:
1 2 3 4
| public class TestClass
{
public string Text() { return "texte"; }
} |
Voici le code MSIL original :
Code:
1 2 3 4 5 6
| 0000 : nop
0001 : ldstr "texte"
0006 : stloc.0
0007 : br.s 0009
0009 : ldloc.0
000a : ret |
Et voici le code généré...
Code:
1 2 3 4 5 6 7 8 9
| 0000 : nop
0001 : ldstr "texte"
0006 : stloc.0
0007 : br.s 0012
0009 : nop
000a : nop
000b : nop
000c : ldloc.0
000d : ret |
A noter que je copie instruction par instruction, et qu'à priori, les instructions copiées sont correctes (j'ai vérifié avec une exécution pas-à-pas du programme de copie).
Comment expliquer ces 3 nop supplémentaires et le décalage de 9 octets dans l'opérande du br.s ?