[PATCH] D17778: TypedError for recoverable error handling

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 11 11:00:36 PST 2016


lhames added inline comments.

================
Comment at: docs/ProgrammersManual.rst:373
@@ +372,3 @@
+    if (f < 0)
+      return make_typed_error<FloatingPointError>(...);
+    return sqrt(f);
----------------
joker.eph wrote:
> `make_typed_error` is a bit "long" (the "..." here will almost always lead to wrapping (bad for vertical space efficiency).
> What about:
> 
> `return TypedError<FloatingPointError>(...)`
> 
> The same remark applies to all the API that repeat "TypedError" everywhere (`catchTypedError`, etc.). Can we at least drop the "typed" part where possible?
> 
So far I've heard general enthusiasm (and no objections) to renaming this class and the utilities to just "Error". I'll re-work the patch - that should cut down on this boilerplate a little.

================
Comment at: include/llvm/Support/TypedError.h:148
@@ +147,3 @@
+    Other.setPtr(nullptr);
+    Other.setChecked(true);
+  }
----------------
joker.eph wrote:
> Could this ctor be expressed in terms of the move assignment operator?
Yes it could. I'll fix that up.

================
Comment at: include/llvm/Support/TypedError.h:355
@@ +354,3 @@
+///
+/// class MyError : pubilc TypedErrorInfo<MyError> {};
+///
----------------
joker.eph wrote:
> s/pubilc/public
Good catch.

================
Comment at: include/llvm/Support/TypedError.h:359
@@ +358,3 @@
+/// checkAllErrors(std::move(E),
+///   handle<MyError>([](std::unique_ptr<MyError> M) {
+///     ...
----------------
joker.eph wrote:
> I like reading the `handle<MyError>(...)` but won't it be actually `handle<MyError>(...)`?
I don't follow the question?

If you mean that this syntax is a bit verbose - I agree. I'll see if I can improve this.

================
Comment at: include/llvm/Support/TypedError.h:499
@@ +498,3 @@
+/// type.
+template <class T> class TypedErrorOr {
+  template <class OtherT> friend class TypedErrorOr;
----------------
joker.eph wrote:
> I assumed you almost copy/pasted the `ErrorOr` implementation right? Some weirdness here and there but it has been pretty well tested so...
I did. :)

================
Comment at: include/llvm/Support/TypedError.h:537
@@ +536,3 @@
+
+  // This might eventually need SFINAE but it's more complex than is_convertible
+  // & I'm too lazy to write it right now.
----------------
joker.eph wrote:
> What do you mean?
This comment was copied over from ErrorOr - I think it's stale. I'll get rid of it.

================
Comment at: include/llvm/Support/TypedError.h:554
@@ +553,3 @@
+    if (!HasError)
+      getStorage()->~storage_type();
+  }
----------------
joker.eph wrote:
> The error storage never needs deletion?
> Is it handled differently somehow?
> 
Oops. This is an omission. ErrorOr doesn't need to delete its error storage because it's just a std::error_code, but TypedErrorOr does. I'll fix that up.


Repository:
  rL LLVM

http://reviews.llvm.org/D17778





More information about the llvm-commits mailing list