Well, it's nice to have the scoping of the variable to the if block. I mean, this is mostly all stylistic, but it would just be nice to not have to think "oh, wait, it's v8 so I have to do it this other way" as much when there's a standard way to interface with the type of behavior in C++.
My code base uses a bunch of different APIs and having common idioms look drastically different between them and standard c++ just makes reading/writing code more painful because you have to remember how v8 does things now.. basically forced context switches within a single logical construct in my overall code. It's obviously not the end of the world, but the more it looks like normal C++ the more efficient I am. Does adding the explicit operator bool make things more likely to be accidentally skipped over for properly testing return values? If I can't at least get that I'll probably just maintain a patched version of v8.h for my own use and that's just annoying and makes it so I can't share any of that code with anyone else. --Zac On Tue, Mar 6, 2018 at 2:08 AM, Leszek Swirski <[email protected]> wrote: > I think the expected pattern is more along the lines of: > >> >> Local<...> result; >> if (v8::JSON::Parse(...).ToLocal(&result)) { >> result->Set(...); >> } > > > Would that be succinct enough for you, or is it the lack of type deduction > of result that is the problem? That could be avoided with some > macro+decltype hackery. > > - Leszek > > On Tue, Mar 6, 2018 at 12:11 AM, Zac Hansen <[email protected]> wrote: > >> I can see where you are coming from even if I don't agree, but that >> doesn't seem to preclude adding the `explicit operator bool`, does it? >> Just that alone would get me 95% of what I want. >> >> I'd suggest adding it to maybe, as well, I think. >> >> --Zac >> >> >> On Mon, Mar 5, 2018 at 4:03 PM, Jakob Kummerow <[email protected]> >> wrote: >> >>> I think this is mostly because the whole point of MaybeLocal is to be >>> explicit. "ToLocalChecked" should say "this can crash if the MaybeLocal is >>> empty" loudly in your face, rather than hiding it in a small operator. >>> >>> There are many ways to make V8's API more concise but less safe/obvious. >>> I agree that it is unfortunate how verbose the .IsEmpty/.ToLocalChecked >>> pattern is, but we care more about avoiding bugs than about avoiding a few >>> extra characters. If you know what you're doing, you can create your own >>> helpers and abstractions. >>> >>> >>> On Mon, Mar 5, 2018 at 3:18 PM <[email protected]> wrote: >>> >>>> Specifically, I'm suggesting adding: >>>> >>>> diff --git a/include/v8.h b/include/v8.h >>>> >>>> index b96771ed45..5d5685839a 100644 >>>> >>>> --- a/include/v8.h >>>> >>>> +++ b/include/v8.h >>>> >>>> @@ -383,6 +383,18 @@ class MaybeLocal { >>>> >>>> return IsEmpty() ? default_value : Local<S>(val_); >>>> >>>> } >>>> >>>> >>>> >>>> + explicit operator bool() const { >>>> >>>> + return !this->IsEmpty(); >>>> >>>> + } >>>> >>>> + >>>> >>>> + Local<T> & operator->() { >>>> >>>> + return this->ToLocalChecked(); >>>> >>>> + } >>>> >>>> + >>>> >>>> + Local<T> operator*() { >>>> >>>> + return this->ToLocalChecked(); >>>> >>>> + } >>>> >>>> + >>>> >>>> private: >>>> >>>> T* val_; >>>> >>>> }; >>>> >>>> On Monday, March 5, 2018 at 3:02:11 PM UTC-8, [email protected] wrote: >>>>> >>>>> I'd really like to be able to say: >>>>> >>>>> if (auto result = v8::JSON::Parse(...)) { >>>>> (*result)->Set(...); >>>>> } >>>>> >>>>> instead of >>>>> >>>>> if (auto result = v8::JSON::Parse(...); !result.IsEmpty()) { >>>>> result.ToLocalChecked()->Set(...); >>>>> } >>>>> >>>>> or worse without '17. >>>>> >>>>> Is there a technical or policy reason this hasn't/can't be added? I'd >>>>> be happy to submit it. >>>>> >>>>> Thank you. >>>>> >>>>> --Zac >>>>> >>>>> >>>>> -- >>>> -- >>>> v8-dev mailing list >>>> [email protected] >>>> http://groups.google.com/group/v8-dev >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-dev" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> -- >>> v8-dev mailing list >>> [email protected] >>> http://groups.google.com/group/v8-dev >>> --- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "v8-dev" group. >>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>> pic/v8-dev/sw1rs5U6UNg/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> -- >> v8-dev mailing list >> [email protected] >> http://groups.google.com/group/v8-dev >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > -- > v8-dev mailing list > [email protected] > http://groups.google.com/group/v8-dev > --- > You received this message because you are subscribed to a topic in the > Google Groups "v8-dev" group. > To unsubscribe from this topic, visit https://groups.google.com/d/ > topic/v8-dev/sw1rs5U6UNg/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
