/// <summary> /// Transcript given instructions in context of given method. /// Transcription is processed by given emitter. /// </summary> /// <param name="method">Context method of transcription</param> /// <param name="instructions">Transcripted instructions</param> /// <param name="emitter">Emitter where transcription is emitted</param> internal static void Transcript(TypeMethodInfo method, IEnumerable <CILInstruction> instructions, EmitterBase emitter) { E = emitter; Method = method; LocalTmpVar = E.GetTemporaryVariable("local"); //prepare labels table Labels.Clear(); foreach (var instruction in instructions) { var labelName = string.Format("L_0x{0:x4}", instruction.Address); Labels.Add(instruction.Address, E.CreateLabel(labelName)); } foreach (var instruction in instructions) { Instruction = instruction; E.SetLabel(Labels[instruction.Address]); var block = E.StartNewInfoBlock(); block.Comment = "\n---" + Instruction.ToString(); Action transcriptor; if (_transcriptors.TryGetValue(Name, out transcriptor)) { transcriptor(); } else { unknownInstruction(); } } }