diff --git a/linqpad-samples/Examples/FileOrder.txt b/linqpad-samples/Examples/FileOrder.txt index 41f711c..942318f 100644 --- a/linqpad-samples/Examples/FileOrder.txt +++ b/linqpad-samples/Examples/FileOrder.txt @@ -1,3 +1,4 @@ Auto Charter.linq Spritesheet Cutter.linq -Loan Balance Calculator.linq \ No newline at end of file +Loan Balance Calculator.linq +OpCode Browser.linq \ No newline at end of file diff --git a/linqpad-samples/Examples/OpCode Browser.linq b/linqpad-samples/Examples/OpCode Browser.linq new file mode 100644 index 0000000..7bc210c --- /dev/null +++ b/linqpad-samples/Examples/OpCode Browser.linq @@ -0,0 +1,42 @@ + + C:\Users\rdavis\Source\Repos\linqpad-dump-editable\src\DumpEditable\bin\Debug\net47\LINQPad.DumpEditable.dll + LINQPad.DumpEditable + System.Reflection.Emit + + +void Main() +{ + EditableDumpContainer.DefaultOptions.StringBasedEditor = + Editors.TextBoxBasedStringEditor(liveUpdates: true); + + var filter = new OpCodeFilter().DumpEditable(out var editor); + var opcodes = new DumpContainer().Dump(); + var selectedOpcode = new DumpContainer() { DumpDepth = 2 }.Dump(); + + var filteredOpcodes = + AllOpCodes + .Where(filter.Matches) + .Select(o => new Hyperlinq(() => selectedOpcode.Content = o, o.Name)); + + editor.OnChanged += () => opcodes.Content = Util.HorizontalRun(true, filteredOpcodes); + editor.OnChanged(); +} + +public IEnumerable AllOpCodes + => typeof(OpCodes) + .GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.Default) + .Select(f => (OpCode) f.GetValue(null)); + +public class OpCodeFilter +{ + public string Name { get; set; } + public OpCodeType? OpCodeType { get; set; } + public FlowControl? FlowControl { get; set; } + public OperandType? OperandType{ get; set; } + + public bool Matches(OpCode o) + => (String.IsNullOrWhiteSpace(Name) || o.Name.ToLower().Contains(Name.ToLower())) + && (OpCodeType is null || o.OpCodeType == OpCodeType) + && (FlowControl is null || o.FlowControl == FlowControl) + && (OperandType is null || o.OperandType == OperandType); +} \ No newline at end of file