That seems fine to me. Jim
> On Sep 19, 2017, at 11:39 AM, Leonard Mosescu <mose...@google.com> wrote: > > So, how about I look into exposing WasInterrupted() through SB APIs in a > follow up change? > > On Tue, Sep 19, 2017 at 11:36 AM, Jim Ingham <jing...@apple.com> wrote: > Xcode does, I don't know about other UI's. > > Jim > > > On Sep 19, 2017, at 11:35 AM, Leonard Mosescu <mose...@google.com> wrote: > > > > I agree Jim. I'd like like to build thing incrementally - checking in the > > current change as is does not preclude adding the SB APIs while it does > > provide the foundation. > > > > I think that going after the scenarios you mention is a significant > > increase in scope. Are people even hooking up DispatchInterrupt() from > > whatever interactive driver they use? > > > > On Tue, Sep 19, 2017 at 11:27 AM, Jim Ingham <jing...@apple.com> wrote: > > We agreed to forwards compatibility because people write big scripts that > > use the SB API, implement GUI's on top of them (more than just Xcode) etc. > > So we try not to jerk those folks around. That adds a little more > > responsibility on our part to think carefully about what we add, but the > > notion that we should refrain from making useful functionality available > > because we'd rather not be beholden to our decisions seems really > > wrong-headed to me. > > > > And in this case there's a clear use for this. For instance the xnu macros > > have a bunch of Python based commands that spew out pages and pages of > > output. Those guys would love to make their commands interruptible. To do > > that they would need to call WasInterrupted. So this is 100% something > > that should be available at the SB API layer. > > > > Jim > > > > > > > > > On Sep 19, 2017, at 11:18 AM, Zachary Turner <ztur...@google.com> wrote: > > > > > > Also, it avoids polluting the SB interface with another function that > > > probably nobody is ever going to use outside of testing. Adding to the > > > SB API should take an act of God, given that once it gets added it has to > > > stay until the end of time. > > > > > > On Tue, Sep 19, 2017 at 11:15 AM Zachary Turner <ztur...@google.com> > > > wrote: > > > That would work, but I think it's adding many more pieces to the test. > > > Now there's threads, a Python layer, and multiprocess dotest > > > infrastructure in the equation. Each providing an additional source of > > > flakiness and instability. > > > > > > If all it is is a pass-through, then just calling the function it passes > > > through to is a strictly better test, since it's focusing the test on the > > > underlying piece of functionality and removing additional sources of > > > failure and instability from the test. > > > > > > On Tue, Sep 19, 2017 at 11:02 AM Jim Ingham <jing...@apple.com> wrote: > > > I'd really prefer to do this as/along with an SB API test since we also > > > need commands made through the SB API to be interruptible, and we should > > > test that that also works. So this kills two birds with one stone. > > > > > > In general, when developing any high-level features in lldb one of the > > > questions you should ask yourself is whether this is useful at the SB API > > > layer. In this case it obviously is (actually I'm a little embarrassed I > > > didn't think of this requirement). If so, then it's simplest to test it > > > at that layer. If the SB API is anything more than a pass-through, then > > > you might also want to write a unit test for the underlying C++ API's. > > > But in this case the SB function will just call the underlying > > > CommandInterpreter one, so testing at the SB layer is sufficient. > > > > > > Jim > > > > > > > On Sep 19, 2017, at 10:45 AM, Zachary Turner via Phabricator > > > > <revi...@reviews.llvm.org> wrote: > > > > > > > > zturner added a comment. > > > > > > > > In https://reviews.llvm.org/D37923#875322, @clayborg wrote: > > > > > > > >> We should have a test. The test would need to use pexpect or something > > > >> similar. If anyone has any pointer on how to make a test for this, > > > >> please chime in. I was thinking just a pexpect based test. > > > > > > > > > > > > This kind of thing is perfect for a unit test, but I'm not sure how > > > > easy that would be with the current design. You'd basically do > > > > something like: > > > > > > > > struct MockStream { > > > > explicit MockStream(CommandInterpreter &Interpreter, int > > > > InterruptAfter) > > > > : CommandInterpreter(Interpreter), InterruptAfter(InterruptAfter) > > > > {} > > > > > > > > CommandInterpreter &Interpreter; > > > > const int InterruptAfter; > > > > int Lines = 0; > > > > std::string Buffer; > > > > > > > > void Write(StringRef S) { > > > > ++Lines; > > > > if (Lines >= InterruptAfter) { > > > > Interpreter.Interrupt(); > > > > return; > > > > } > > > > Buffer += S; > > > > } > > > > }; > > > > > > > > TEST_F(CommandInterruption) { > > > > CommandInterpreter Interpreter; > > > > MockStream Stream(Interpreter, 3); > > > > Interpreter.PrintCommandOutput(Stream, "a\nb\nc\nd\ne\nf\n"); > > > > EXPECT_EQ(Stream.Lines == 3); > > > > EXPECT_EQ(Stream.Buffer == "a\nb\nc\n"); > > > > } > > > > > > > > > > > > https://reviews.llvm.org/D37923 > > > > > > > > > > > > > > > > > > > > > _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits