Fix: Pin flags code generation returning FLAG_NONE (#2377)

Co-authored-by: Otto winter <otto@otto-winter.com>
This commit is contained in:
Paul Monigatti 2021-09-23 21:19:17 +12:00 committed by GitHub
parent ea6a7a22ff
commit 17dcba8f8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

View File

@ -310,6 +310,19 @@ class FloatLiteral(Literal):
return f"{self.f}f"
class BinOpExpression(Expression):
__slots__ = ("op", "lhs", "rhs")
def __init__(self, op: str, lhs: SafeExpType, rhs: SafeExpType):
# Remove every None on end
self.op = op
self.lhs = safe_exp(lhs)
self.rhs = safe_exp(rhs)
def __str__(self):
return f"{self.lhs} {self.op} {self.rhs}"
def safe_exp(obj: SafeExpType) -> Expression:
"""Try to convert obj to an expression by automatically converting native python types to
expressions/literals.
@ -756,6 +769,10 @@ class MockObj(Expression):
next_op = "->"
return MockObj(f"{self.base}[{item}]", next_op)
def __or__(self, other: SafeExpType) -> "MockObj":
op = BinOpExpression("|", self, other)
return MockObj(op)
class MockObjEnum(MockObj):
def __init__(self, *args, **kwargs):

View File

@ -90,7 +90,7 @@ def gpio_flags_expr(mode):
CONF_PULLDOWN: cg.gpio_Flags.FLAG_PULLDOWN,
}
active_flags = [v for k, v in FLAGS_MAPPING.items() if mode.get(k)]
if active_flags:
if not active_flags:
return cg.gpio_Flags.FLAG_NONE
return reduce(operator.or_, active_flags)