Selaa lähdekoodia

AK+LibJS: Allow `{TRY,MUST}{,_OR_THROW_OOM}` on list-initializers

List initializers may contain commas without surrounding parenthesis,
causing them to be passed as multiple macro arguments.
Jonne Ransijn 8 kuukautta sitten
vanhempi
commit
d5fbf7323a
2 muutettua tiedostoa jossa 8 lisäystä ja 8 poistoa
  1. 4 4
      AK/Try.h
  2. 4 4
      Libraries/LibJS/Runtime/Completion.h

+ 4 - 4
AK/Try.h

@@ -24,11 +24,11 @@
 //       from a fallible expression. This will not do what you want; the statement expression
 //       will create a copy regardless, so it is explicitly disallowed.
 
-#define TRY(expression)                                                                              \
+#define TRY(...)                                                                                     \
     ({                                                                                               \
         /* Ignore -Wshadow to allow nesting the macro. */                                            \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                             \
-            auto&& _temporary_result = (expression));                                                \
+            auto&& _temporary_result = (__VA_ARGS__));                                               \
         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \
             "Do not return a reference from a fallible expression");                                 \
         if (_temporary_result.is_error()) [[unlikely]]                                               \
@@ -36,11 +36,11 @@
         _temporary_result.release_value();                                                           \
     })
 
-#define MUST(expression)                                                                             \
+#define MUST(...)                                                                                    \
     ({                                                                                               \
         /* Ignore -Wshadow to allow nesting the macro. */                                            \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                             \
-            auto&& _temporary_result = (expression));                                                \
+            auto&& _temporary_result = (__VA_ARGS__));                                               \
         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \
             "Do not return a reference from a fallible expression");                                 \
         AK_HANDLE_UNEXPECTED_ERROR(_temporary_result)                                                \

+ 4 - 4
Libraries/LibJS/Runtime/Completion.h

@@ -17,11 +17,11 @@
 
 namespace JS {
 
-#define TRY_OR_THROW_OOM(vm, expression)                                                                              \
+#define TRY_OR_THROW_OOM(vm, ...)                                                                                     \
     ({                                                                                                                \
         /* Ignore -Wshadow to allow nesting the macro. */                                                             \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                                              \
-            auto&& _temporary_result = (expression));                                                                 \
+            auto&& _temporary_result = (__VA_ARGS__));                                                                \
         if (_temporary_result.is_error()) {                                                                           \
             VERIFY(_temporary_result.error().code() == ENOMEM);                                                       \
             return (vm).throw_completion<JS::InternalError>((vm).error_message(::JS::VM::ErrorMessage::OutOfMemory)); \
@@ -31,11 +31,11 @@ namespace JS {
         _temporary_result.release_value();                                                                            \
     })
 
-#define MUST_OR_THROW_OOM(expression)                                                                  \
+#define MUST_OR_THROW_OOM(...)                                                                         \
     ({                                                                                                 \
         /* Ignore -Wshadow to allow nesting the macro. */                                              \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                               \
-            auto&& _temporary_result = (expression));                                                  \
+            auto&& _temporary_result = (__VA_ARGS__));                                                 \
         if (_temporary_result.is_error()) {                                                            \
             auto _completion = _temporary_result.release_error();                                      \
                                                                                                        \