Prechádzať zdrojové kódy

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 mesiacov pred
rodič
commit
d5fbf7323a
2 zmenil súbory, kde vykonal 8 pridanie a 8 odobranie
  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
 //       from a fallible expression. This will not do what you want; the statement expression
 //       will create a copy regardless, so it is explicitly disallowed.
 //       will create a copy regardless, so it is explicitly disallowed.
 
 
-#define TRY(expression)                                                                              \
+#define TRY(...)                                                                                     \
     ({                                                                                               \
     ({                                                                                               \
         /* Ignore -Wshadow to allow nesting the macro. */                                            \
         /* Ignore -Wshadow to allow nesting the macro. */                                            \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                             \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                             \
-            auto&& _temporary_result = (expression));                                                \
+            auto&& _temporary_result = (__VA_ARGS__));                                               \
         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \
         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \
             "Do not return a reference from a fallible expression");                                 \
             "Do not return a reference from a fallible expression");                                 \
         if (_temporary_result.is_error()) [[unlikely]]                                               \
         if (_temporary_result.is_error()) [[unlikely]]                                               \
@@ -36,11 +36,11 @@
         _temporary_result.release_value();                                                           \
         _temporary_result.release_value();                                                           \
     })
     })
 
 
-#define MUST(expression)                                                                             \
+#define MUST(...)                                                                                    \
     ({                                                                                               \
     ({                                                                                               \
         /* Ignore -Wshadow to allow nesting the macro. */                                            \
         /* Ignore -Wshadow to allow nesting the macro. */                                            \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                             \
         AK_IGNORE_DIAGNOSTIC("-Wshadow",                                                             \
-            auto&& _temporary_result = (expression));                                                \
+            auto&& _temporary_result = (__VA_ARGS__));                                               \
         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \
         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \
             "Do not return a reference from a fallible expression");                                 \
             "Do not return a reference from a fallible expression");                                 \
         AK_HANDLE_UNEXPECTED_ERROR(_temporary_result)                                                \
         AK_HANDLE_UNEXPECTED_ERROR(_temporary_result)                                                \

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

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