WG14 result
Loading...
Searching...
No Matches
try.h File Reference
#include "config.h"
Include dependency graph for try.h:

Go to the source code of this file.

Macros

#define OUTCOME_TRY_GLUE2(x, y)   x##y
 
#define OUTCOME_TRY_GLUE(x, y)   OUTCOME_TRY_GLUE2(x, y)
 
#define OUTCOME_TRY_UNIQUE_NAME    OUTCOME_TRY_GLUE(_outcome_try_unique_name_temporary, __COUNTER__)
 
#define OUTCOME_TRY_RETURN_ARG_COUNT(_1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, count, ...)    count
 
#define OUTCOME_TRY_EXPAND_ARGS(args)   OUTCOME_TRY_RETURN_ARG_COUNT args
 
#define OUTCOME_TRY_COUNT_ARGS_MAX8(...)    OUTCOME_TRY_EXPAND_ARGS((__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0))
 
#define OUTCOME_TRY_OVERLOAD_MACRO2(name, count)   name##count
 
#define OUTCOME_TRY_OVERLOAD_MACRO1(name, count)    OUTCOME_TRY_OVERLOAD_MACRO2(name, count)
 
#define OUTCOME_TRY_OVERLOAD_MACRO(name, count)    OUTCOME_TRY_OVERLOAD_MACRO1(name, count)
 
#define OUTCOME_TRY_OVERLOAD_GLUE(x, y)   x y
 
#define OUTCOME_TRY_CALL_OVERLOAD(name, ...)
 
#define _OUTCOME_TRY_RETURN_ARG_COUNT(_1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, count, ...)    count
 
#define _OUTCOME_TRY_EXPAND_ARGS(args)   _OUTCOME_TRY_RETURN_ARG_COUNT args
 
#define _OUTCOME_TRY_COUNT_ARGS_MAX8(...)    _OUTCOME_TRY_EXPAND_ARGS((__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0))
 
#define _OUTCOME_TRY_OVERLOAD_MACRO2(name, count)   name##count
 
#define _OUTCOME_TRY_OVERLOAD_MACRO1(name, count)    _OUTCOME_TRY_OVERLOAD_MACRO2(name, count)
 
#define _OUTCOME_TRY_OVERLOAD_MACRO(name, count)    _OUTCOME_TRY_OVERLOAD_MACRO1(name, count)
 
#define _OUTCOME_TRY_OVERLOAD_GLUE(x, y)   x y
 
#define _OUTCOME_TRY_CALL_OVERLOAD(name, ...)
 
#define OUTCOME_TRY_LIKELY_IF(...)   if(__VA_ARGS__)
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_AUTO(...)   __typeof__(__VA_ARGS__)
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_UNPACK(...)   __VA_ARGS__
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE3(unique, ...)    OUTCOME_TRYV2_UNIQUE_STORAGE_AUTO(__VA_ARGS__) unique = (__VA_ARGS__)
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE2(x)   x
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE(unique, x, ...)
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED3(unique, x, y, ...)    x unique = (__VA_ARGS__)
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED2(x)   x
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED(unique, ...)
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE1(...)   OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE2(...)    OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED
 
#define OUTCOME_TRYV2_UNIQUE_STORAGE(unique, spec, ...)
 
#define OUTCOME_TRY2_VAR_SECOND2(x, var)   var
 
#define OUTCOME_TRY2_VAR_SECOND3(x, y, ...)   x y
 
#define OUTCOME_TRY2_VAR(spec)
 
#define WG14_RESULT_TRY_IMPLV(unique, retstmt, cleanup, spec, ...)
 
#define WG14_RESULT_TRY_IMPLA(unique, retstmt, cleanup, var, ...)
 
#define WG14_RESULT_TRY_IMPL_RETURN(unique, ident)
 
#define WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP_AND_NEW_RETURN_TYPE( unique, spec, ident, cleanup, ...)
 
#define WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP(unique, spec, cleanup, ...)    WG14_RESULT_TRY_IMPLA(unique, return unique, cleanup, spec, __VA_ARGS__)
 
#define WG14_RESULT_TRY_WITH_CLEANUP(unique, cleanup, ...)    WG14_RESULT_TRY_IMPLV(unique, return unique, cleanup, deduce, __VA_ARGS__)
 
#define WG14_RESULT_TRY_SAME_RETURN_TYPE(unique, ...)    WG14_RESULT_TRY_IMPLV(unique, return unique, , deduce, __VA_ARGS__)
 
#define WG14_RESULT_TRY_INVOKE_TRY8(a, b, c, d, e, f, g, h)
 
#define WG14_RESULT_TRY_INVOKE_TRY7(a, b, c, d, e, f, g)
 
#define WG14_RESULT_TRY_INVOKE_TRY6(a, b, c, d, e, f)
 
#define WG14_RESULT_TRY_INVOKE_TRY5(a, b, c, d, e)
 
#define WG14_RESULT_TRY_INVOKE_TRY4(a, b, c, d)
 
#define WG14_RESULT_TRY_INVOKE_TRY3(a, b, c)    WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP(OUTCOME_TRY_UNIQUE_NAME, a, b, c)
 
#define WG14_RESULT_TRY_INVOKE_TRY2(a, b)    WG14_RESULT_TRY_WITH_CLEANUP(OUTCOME_TRY_UNIQUE_NAME, a, b)
 
#define WG14_RESULT_TRY_INVOKE_TRY1(expr)    WG14_RESULT_TRY_SAME_RETURN_TYPE(OUTCOME_TRY_UNIQUE_NAME, expr)
 
#define WG14_RESULT_TRY(...)    OUTCOME_TRY_CALL_OVERLOAD(WG14_RESULT_TRY_INVOKE_TRY, __VA_ARGS__)
 

Macro Definition Documentation

◆ _OUTCOME_TRY_CALL_OVERLOAD

#define _OUTCOME_TRY_CALL_OVERLOAD (   name,
  ... 
)
Value:
name, _OUTCOME_TRY_COUNT_ARGS_MAX8(__VA_ARGS__)), \
(__VA_ARGS__))
#define _OUTCOME_TRY_OVERLOAD_MACRO(name, count)
Definition try.h:71
#define _OUTCOME_TRY_COUNT_ARGS_MAX8(...)
Definition try.h:66
#define _OUTCOME_TRY_OVERLOAD_GLUE(x, y)
Definition try.h:73

Definition at line 74 of file try.h.

◆ _OUTCOME_TRY_COUNT_ARGS_MAX8

#define _OUTCOME_TRY_COUNT_ARGS_MAX8 (   ...)     _OUTCOME_TRY_EXPAND_ARGS((__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0))

Definition at line 66 of file try.h.

◆ _OUTCOME_TRY_EXPAND_ARGS

#define _OUTCOME_TRY_EXPAND_ARGS (   args)    _OUTCOME_TRY_RETURN_ARG_COUNT args

Definition at line 65 of file try.h.

◆ _OUTCOME_TRY_OVERLOAD_GLUE

#define _OUTCOME_TRY_OVERLOAD_GLUE (   x,
 
)    x y

Definition at line 73 of file try.h.

◆ _OUTCOME_TRY_OVERLOAD_MACRO

#define _OUTCOME_TRY_OVERLOAD_MACRO (   name,
  count 
)     _OUTCOME_TRY_OVERLOAD_MACRO1(name, count)

Definition at line 71 of file try.h.

◆ _OUTCOME_TRY_OVERLOAD_MACRO1

#define _OUTCOME_TRY_OVERLOAD_MACRO1 (   name,
  count 
)     _OUTCOME_TRY_OVERLOAD_MACRO2(name, count)

Definition at line 69 of file try.h.

◆ _OUTCOME_TRY_OVERLOAD_MACRO2

#define _OUTCOME_TRY_OVERLOAD_MACRO2 (   name,
  count 
)    name##count

Definition at line 68 of file try.h.

◆ _OUTCOME_TRY_RETURN_ARG_COUNT

#define _OUTCOME_TRY_RETURN_ARG_COUNT (   _1_,
  _2_,
  _3_,
  _4_,
  _5_,
  _6_,
  _7_,
  _8_,
  count,
  ... 
)     count

Definition at line 62 of file try.h.

◆ OUTCOME_TRY2_VAR

#define OUTCOME_TRY2_VAR (   spec)
Value:
_OUTCOME_TRY_CALL_OVERLOAD(OUTCOME_TRY2_VAR_SECOND, \
#define _OUTCOME_TRY_CALL_OVERLOAD(name,...)
Definition try.h:74
#define OUTCOME_TRYV2_UNIQUE_STORAGE_UNPACK(...)
Definition try.h:98

Definition at line 121 of file try.h.

◆ OUTCOME_TRY2_VAR_SECOND2

#define OUTCOME_TRY2_VAR_SECOND2 (   x,
  var 
)    var

Definition at line 119 of file try.h.

◆ OUTCOME_TRY2_VAR_SECOND3

#define OUTCOME_TRY2_VAR_SECOND3 (   x,
  y,
  ... 
)    x y

Definition at line 120 of file try.h.

◆ OUTCOME_TRY_CALL_OVERLOAD

#define OUTCOME_TRY_CALL_OVERLOAD (   name,
  ... 
)
Value:
(__VA_ARGS__))
#define OUTCOME_TRY_OVERLOAD_MACRO(name, count)
Definition try.h:54
#define OUTCOME_TRY_OVERLOAD_GLUE(x, y)
Definition try.h:56
#define OUTCOME_TRY_COUNT_ARGS_MAX8(...)
Definition try.h:49

Definition at line 57 of file try.h.

◆ OUTCOME_TRY_COUNT_ARGS_MAX8

#define OUTCOME_TRY_COUNT_ARGS_MAX8 (   ...)     OUTCOME_TRY_EXPAND_ARGS((__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0))

Definition at line 49 of file try.h.

◆ OUTCOME_TRY_EXPAND_ARGS

#define OUTCOME_TRY_EXPAND_ARGS (   args)    OUTCOME_TRY_RETURN_ARG_COUNT args

Definition at line 48 of file try.h.

◆ OUTCOME_TRY_GLUE

#define OUTCOME_TRY_GLUE (   x,
 
)    OUTCOME_TRY_GLUE2(x, y)

Definition at line 41 of file try.h.

◆ OUTCOME_TRY_GLUE2

#define OUTCOME_TRY_GLUE2 (   x,
 
)    x##y

Definition at line 40 of file try.h.

◆ OUTCOME_TRY_LIKELY_IF

#define OUTCOME_TRY_LIKELY_IF (   ...)    if(__VA_ARGS__)

Definition at line 88 of file try.h.

◆ OUTCOME_TRY_OVERLOAD_GLUE

#define OUTCOME_TRY_OVERLOAD_GLUE (   x,
 
)    x y

Definition at line 56 of file try.h.

◆ OUTCOME_TRY_OVERLOAD_MACRO

#define OUTCOME_TRY_OVERLOAD_MACRO (   name,
  count 
)     OUTCOME_TRY_OVERLOAD_MACRO1(name, count)

Definition at line 54 of file try.h.

◆ OUTCOME_TRY_OVERLOAD_MACRO1

#define OUTCOME_TRY_OVERLOAD_MACRO1 (   name,
  count 
)     OUTCOME_TRY_OVERLOAD_MACRO2(name, count)

Definition at line 52 of file try.h.

◆ OUTCOME_TRY_OVERLOAD_MACRO2

#define OUTCOME_TRY_OVERLOAD_MACRO2 (   name,
  count 
)    name##count

Definition at line 51 of file try.h.

◆ OUTCOME_TRY_RETURN_ARG_COUNT

#define OUTCOME_TRY_RETURN_ARG_COUNT (   _1_,
  _2_,
  _3_,
  _4_,
  _5_,
  _6_,
  _7_,
  _8_,
  count,
  ... 
)     count

Definition at line 45 of file try.h.

◆ OUTCOME_TRY_UNIQUE_NAME

#define OUTCOME_TRY_UNIQUE_NAME    OUTCOME_TRY_GLUE(_outcome_try_unique_name_temporary, __COUNTER__)

Definition at line 42 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE

#define OUTCOME_TRYV2_UNIQUE_STORAGE (   unique,
  spec,
  ... 
)
Value:
(unique, OUTCOME_TRYV2_UNIQUE_STORAGE_UNPACK spec, __VA_ARGS__)
#define OUTCOME_TRYV2_UNIQUE_STORAGE(unique, spec,...)
Definition try.h:114

Definition at line 114 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE1

#define OUTCOME_TRYV2_UNIQUE_STORAGE1 (   ...)    OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE

Definition at line 111 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE2

#define OUTCOME_TRYV2_UNIQUE_STORAGE2 (   ...)     OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED

Definition at line 112 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_AUTO

#define OUTCOME_TRYV2_UNIQUE_STORAGE_AUTO (   ...)    __typeof__(__VA_ARGS__)

Definition at line 95 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE

#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE (   unique,
  x,
  ... 
)
Value:
#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE2(x)
Definition try.h:101
#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE3(unique,...)
Definition try.h:99

Definition at line 102 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE2

#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE2 (   x)    x

Definition at line 101 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE3

#define OUTCOME_TRYV2_UNIQUE_STORAGE_DEDUCE3 (   unique,
  ... 
)     OUTCOME_TRYV2_UNIQUE_STORAGE_AUTO(__VA_ARGS__) unique = (__VA_ARGS__)

Definition at line 99 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED

#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED (   unique,
  ... 
)
Value:
#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED3(unique, x, y,...)
Definition try.h:105
#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED2(x)
Definition try.h:107

Definition at line 108 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED2

#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED2 (   x)    x

Definition at line 107 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED3

#define OUTCOME_TRYV2_UNIQUE_STORAGE_SPECIFIED3 (   unique,
  x,
  y,
  ... 
)     x unique = (__VA_ARGS__)

Definition at line 105 of file try.h.

◆ OUTCOME_TRYV2_UNIQUE_STORAGE_UNPACK

#define OUTCOME_TRYV2_UNIQUE_STORAGE_UNPACK (   ...)    __VA_ARGS__

Definition at line 98 of file try.h.

◆ WG14_RESULT_TRY

#define WG14_RESULT_TRY (   ...)     OUTCOME_TRY_CALL_OVERLOAD(WG14_RESULT_TRY_INVOKE_TRY, __VA_ARGS__)

Definition at line 186 of file try.h.

◆ WG14_RESULT_TRY_IMPL_RETURN

#define WG14_RESULT_TRY_IMPL_RETURN (   unique,
  ident 
)
Value:
WG14_RESULT(ident) unique##_f; \
unique##_f._flags_ = (unique)._flags_; \
unique##_f.error = (unique).error; \
return unique##_f
#define WG14_RESULT(name)
The type of a Result named name previously declared.
Definition result.h:207

Definition at line 147 of file try.h.

◆ WG14_RESULT_TRY_IMPLA

#define WG14_RESULT_TRY_IMPLA (   unique,
  retstmt,
  cleanup,
  var,
  ... 
)
Value:
WG14_RESULT_TRY_IMPLV(unique, retstmt, cleanup, var, __VA_ARGS__) \
OUTCOME_TRY2_VAR(var) = unique.value
#define WG14_RESULT_TRY_IMPLV(unique, retstmt, cleanup, spec,...)
Definition try.h:135

Definition at line 143 of file try.h.

◆ WG14_RESULT_TRY_IMPLV

#define WG14_RESULT_TRY_IMPLV (   unique,
  retstmt,
  cleanup,
  spec,
  ... 
)
Value:
OUTCOME_TRYV2_UNIQUE_STORAGE(unique, spec, __VA_ARGS__); \
OUTCOME_TRY_LIKELY_IF(WG14_RESULT_HAS_VALUE(unique)); \
else \
{ \
cleanup; \
retstmt; \
}
#define WG14_RESULT_HAS_VALUE(...)
True if a Result is successful (and contains a value if not void)
Definition result.h:215

Definition at line 135 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY1

#define WG14_RESULT_TRY_INVOKE_TRY1 (   expr)     WG14_RESULT_TRY_SAME_RETURN_TYPE(OUTCOME_TRY_UNIQUE_NAME, expr)

Definition at line 183 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY2

#define WG14_RESULT_TRY_INVOKE_TRY2 (   a,
 
)     WG14_RESULT_TRY_WITH_CLEANUP(OUTCOME_TRY_UNIQUE_NAME, a, b)

Definition at line 181 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY3

#define WG14_RESULT_TRY_INVOKE_TRY3 (   a,
  b,
 
)     WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP(OUTCOME_TRY_UNIQUE_NAME, a, b, c)

Definition at line 179 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY4

#define WG14_RESULT_TRY_INVOKE_TRY4 (   a,
  b,
  c,
 
)
Value:
#define WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP_AND_NEW_RETURN_TYPE( unique, spec, ident, cleanup,...)
Definition try.h:153
#define OUTCOME_TRY_UNIQUE_NAME
Definition try.h:42

Definition at line 176 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY5

#define WG14_RESULT_TRY_INVOKE_TRY5 (   a,
  b,
  c,
  d,
 
)
Value:

Definition at line 173 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY6

#define WG14_RESULT_TRY_INVOKE_TRY6 (   a,
  b,
  c,
  d,
  e,
 
)
Value:

Definition at line 170 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY7

#define WG14_RESULT_TRY_INVOKE_TRY7 (   a,
  b,
  c,
  d,
  e,
  f,
 
)
Value:

Definition at line 167 of file try.h.

◆ WG14_RESULT_TRY_INVOKE_TRY8

#define WG14_RESULT_TRY_INVOKE_TRY8 (   a,
  b,
  c,
  d,
  e,
  f,
  g,
 
)
Value:

Definition at line 164 of file try.h.

◆ WG14_RESULT_TRY_SAME_RETURN_TYPE

#define WG14_RESULT_TRY_SAME_RETURN_TYPE (   unique,
  ... 
)     WG14_RESULT_TRY_IMPLV(unique, return unique, , deduce, __VA_ARGS__)

Definition at line 161 of file try.h.

◆ WG14_RESULT_TRY_WITH_CLEANUP

#define WG14_RESULT_TRY_WITH_CLEANUP (   unique,
  cleanup,
  ... 
)     WG14_RESULT_TRY_IMPLV(unique, return unique, cleanup, deduce, __VA_ARGS__)

Definition at line 159 of file try.h.

◆ WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP

#define WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP (   unique,
  spec,
  cleanup,
  ... 
)     WG14_RESULT_TRY_IMPLA(unique, return unique, cleanup, spec, __VA_ARGS__)

Definition at line 157 of file try.h.

◆ WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP_AND_NEW_RETURN_TYPE

#define WG14_RESULT_TRY_WITH_SPEC_AND_CLEANUP_AND_NEW_RETURN_TYPE (   unique,
  spec,
  ident,
  cleanup,
  ... 
)
Value:
cleanup, spec, __VA_ARGS__)
#define WG14_RESULT_TRY_IMPL_RETURN(unique, ident)
Definition try.h:147
#define WG14_RESULT_TRY_IMPLA(unique, retstmt, cleanup, var,...)
Definition try.h:143

Definition at line 153 of file try.h.