From fc5a110f17c195e9ed0c8125f57919557c0d81d4 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Wed, 24 May 2023 16:04:09 -0500 Subject: [PATCH 1/3] Print interpreter messages in SimpleDebugClient --- Tests/SimpleDebugClient/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/SimpleDebugClient/Program.cs b/Tests/SimpleDebugClient/Program.cs index 920bea0..866d9ce 100644 --- a/Tests/SimpleDebugClient/Program.cs +++ b/Tests/SimpleDebugClient/Program.cs @@ -33,7 +33,7 @@ internal class Program private static void Debugger_DispatcherStep(string obj) { - Console.WriteLine(obj); + Console.WriteLine($"[Dispatcher] {obj}"); } private static void Debugger_InterpreterStep(object? sender, InterpreterEntry e) From 3edc265ecd553db4d5f819e0e99da5e3c17dbc75 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Wed, 24 May 2023 16:24:34 -0500 Subject: [PATCH 2/3] Use modern C# features in InterpreterContext.cs --- UIX/Microsoft/Iris/Markup/InterpreterContext.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/UIX/Microsoft/Iris/Markup/InterpreterContext.cs b/UIX/Microsoft/Iris/Markup/InterpreterContext.cs index 103aafd..8b8b533 100644 --- a/UIX/Microsoft/Iris/Markup/InterpreterContext.cs +++ b/UIX/Microsoft/Iris/Markup/InterpreterContext.cs @@ -18,15 +18,15 @@ namespace Microsoft.Iris.Markup private uint _initialBytecodeOffset; private ParameterContext _parameterContext; private Map _scopedLocals; - private static Stack s_cache = new Stack(); + private static Stack s_cache = new(); private InterpreterContext() { } - string IErrorContextSource.GetErrorContextDescription() => _type.Owner.ErrorContextUri; + public string GetErrorContextDescription() => _type.Owner.ErrorContextUri; - void IErrorContextSource.GetErrorPosition(ref int line, ref int column) + public void GetErrorPosition(ref int line, ref int column) { uint currentOffset = _loadResult.ObjectSection.CurrentOffset; if (currentOffset > 0U) @@ -65,8 +65,7 @@ namespace Microsoft.Iris.Markup switch (symbolRef.Origin) { case SymbolOrigin.ScopedLocal: - if (_scopedLocals == null) - _scopedLocals = new Map(); + _scopedLocals ??= new Map(); _scopedLocals[symbolRef.Symbol] = value; break; case SymbolOrigin.Parameter: @@ -94,8 +93,7 @@ namespace Microsoft.Iris.Markup InterpreterContext interpreterContext = null; if (s_cache.Count != 0) interpreterContext = (InterpreterContext)s_cache.Pop(); - if (interpreterContext == null) - interpreterContext = new InterpreterContext(); + interpreterContext ??= new InterpreterContext(); interpreterContext._instance = instance; interpreterContext._initialBytecodeOffset = initialBytecodeOffset; interpreterContext._type = type; @@ -120,8 +118,8 @@ namespace Microsoft.Iris.Markup { int line = 0; int column = 0; - ((IErrorContextSource)this).GetErrorPosition(ref line, ref column); - return string.Format("{0} ({1}, {2})", ((IErrorContextSource)this).GetErrorContextDescription(), line, column); + GetErrorPosition(ref line, ref column); + return $"{GetErrorContextDescription()} ({line}, {column})"; } } } From 03aa478fd47b68e19bb937b64a1d669bc2d1f2b4 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Wed, 24 May 2023 16:24:48 -0500 Subject: [PATCH 3/3] Include more info in InterpreterEntry --- .../Iris/Debug/Data/InterpreterEntry.cs | 28 +++++++++++++++---- UIX/Microsoft/Iris/Markup/Interpreter.cs | 6 ++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/UIX/Microsoft/Iris/Debug/Data/InterpreterEntry.cs b/UIX/Microsoft/Iris/Debug/Data/InterpreterEntry.cs index 7456ecc..c4642ae 100644 --- a/UIX/Microsoft/Iris/Debug/Data/InterpreterEntry.cs +++ b/UIX/Microsoft/Iris/Debug/Data/InterpreterEntry.cs @@ -1,31 +1,49 @@ using Microsoft.Iris.Markup; using System; using System.Collections.Generic; -using System.Linq; using System.Runtime.Serialization; +using System.Text; namespace Microsoft.Iris.Debug.Data; [Serializable] public class InterpreterEntry { - public InterpreterEntry(OpCode opCode, params OpCodeArgument[] args) + public InterpreterEntry(OpCode opCode, uint offset, string loadUri, params OpCodeArgument[] args) { OpCode = opCode; + Offset = offset; + LoadUri = loadUri; if (args != null && args.Length > 0) Arguments = args; - else - Arguments = new List(); } public OpCode OpCode { get; } + + public uint Offset { get; } + + public string LoadUri { get; } + public IList Arguments { get; } + public IList ReturnValues { get; } = new List(); public override string ToString() { - return $"{OpCode}({string.Join(", ", Arguments)}) -> [{string.Join(", ", ReturnValues)}]"; + StringBuilder sb = new($"[{LoadUri} @ 0x{Offset:X}] {OpCode}({string.Join(", ", Arguments)})"); + + if (ReturnValues.Count > 0) + { + sb.Append(" -> "); + + if (ReturnValues.Count == 1) + sb.Append(ReturnValues[0]); + else + sb.Append($"[{string.Join(", ", ReturnValues)}]"); + } + + return sb.ToString(); } } diff --git a/UIX/Microsoft/Iris/Markup/Interpreter.cs b/UIX/Microsoft/Iris/Markup/Interpreter.cs index e110a50..6f18731 100644 --- a/UIX/Microsoft/Iris/Markup/Interpreter.cs +++ b/UIX/Microsoft/Iris/Markup/Interpreter.cs @@ -71,7 +71,7 @@ namespace Microsoft.Iris.Markup while (!errorsDetected) { OpCode opCode = (OpCode)reader.ReadByte(); - Debug.Data.InterpreterEntry entry = new(opCode); + Debug.Data.InterpreterEntry entry = new(opCode, reader.CurrentOffset, loadResult.Uri); // Fetch line and column numbers from the table if (debugging && context.LoadResult.LineNumberTable.TryLookup(reader.CurrentOffset, out int line, out int column)) @@ -696,7 +696,7 @@ namespace Microsoft.Iris.Markup } } - Application.Debugger?.LogInterpreterOpCode(opCode, entry); + Application.Debugger?.LogInterpreterOpCode(context, entry); } while (stack.Count > count) { @@ -918,7 +918,7 @@ namespace Microsoft.Iris.Markup while (!flag) { OpCode opCode = (OpCode)reader.ReadByte(); - var entry = new Debug.Data.InterpreterEntry(opCode); + var entry = new Debug.Data.InterpreterEntry(opCode, reader.CurrentOffset, loadResult.Uri); switch (opCode) {