qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 5/9] qapi: add IfNot


From: John Snow
Subject: Re: [PATCH v3 5/9] qapi: add IfNot
Date: Wed, 12 May 2021 19:32:59 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

On 4/29/21 9:40 AM, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Introduce IfNot predicate class, for 'not' condition expressions.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
  scripts/qapi/common.py | 22 ++++++++++++++++++++++
  1 file changed, 22 insertions(+)

diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 102d347348..6236bfc457 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -224,6 +224,28 @@ def __eq__(self, other: object) -> bool:
          return self.option == other.option
+class IfNot(IfPredicate):
+    def __init__(self, pred: IfPredicate):
+        self.pred = pred
+
+    def docgen(self) -> str:
+        return "not " + self.pred.docgen()
+
+    def cgen(self) -> str:
+        return "!" + self.pred.cgen()
+
+    def __bool__(self) -> bool:
+        return bool(self.pred)
+
+    def __repr__(self) -> str:
+        return f"IfNot({self.pred!r})"
+
+    def __eq__(self, other: object) -> bool:
+        if not isinstance(other, type(self)):
+            return False
+        return self.pred == other.pred
+
+

Seems fine. Lot of boilerplate going on, but I don't have quick ideas for reducing it.

So far we have:

IfPredicate (abstract)

IfOption (wraps a <str>)
IfNot (wraps <IfPredicate>)
IfPredicateList (wraps <List[IfPredicate]>)
  - IfAll
  - IfAny

with fairly similar methods and boilerplate. I'm itching to reduce it a little, somehow...

--js

  class IfPredicateList(IfPredicate):
      C_SEP = ""
      DOC_SEP = ""


Tested-by: John Snow <jsnow@redhat.com>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]