From addb9ade5d82aca1df3d1c457734638457972840 Mon Sep 17 00:00:00 2001 From: Douglas RAILLARD Date: Wed, 13 Mar 2019 15:30:37 +0000 Subject: [PATCH 1/2] exekall.engine: Remove redundant method definitions Remove re-definition of an inherited method. --- tools/exekall/exekall/engine.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tools/exekall/exekall/engine.py b/tools/exekall/exekall/engine.py index 8ff3dcf81..02ddb8d81 100644 --- a/tools/exekall/exekall/engine.py +++ b/tools/exekall/exekall/engine.py @@ -381,11 +381,12 @@ class ExprHelpers(collections.abc.Mapping): def __iter__(self): return iter(self.param_map) - # Keep the default behavior + # Keep the default behavior, to override the one from Mapping def __eq__(self, other): return self is other def __hash__(self): + # consistent with definition of __eq__ return id(self) @@ -2353,12 +2354,6 @@ class ExprValBase(ExprHelpers): return self.get_by_predicate(predicate) - def __eq__(self, other): - return self is other - - def __hash__(self): - # consistent with definition of __eq__ - return id(self) class FrozenExprVal(ExprValBase): def __init__(self, -- GitLab From 60eb28097f49abf4032d2258e40eab17e4cdd687 Mon Sep 17 00:00:00 2001 From: Douglas RAILLARD Date: Wed, 13 Mar 2019 15:31:18 +0000 Subject: [PATCH 2/2] exekall.engine: Add ExprVal.get_by_type() Allow getting a parent value by its type. This can be handy to avoid hardcoding the parameters path from a value to one of its parent. --- tools/exekall/exekall/engine.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/exekall/exekall/engine.py b/tools/exekall/exekall/engine.py index 02ddb8d81..3c0899e7b 100644 --- a/tools/exekall/exekall/engine.py +++ b/tools/exekall/exekall/engine.py @@ -2354,6 +2354,13 @@ class ExprValBase(ExprHelpers): return self.get_by_predicate(predicate) + def get_by_type(self, cls, include_subclasses=True, **kwargs): + if include_subclasses: + predicate = lambda expr_val: isinstance(expr_val.value, cls) + else: + predicate = lambda expr_val: type(expr_val.value) is cls + return self.get_by_predicate(predicate, **kwargs) + class FrozenExprVal(ExprValBase): def __init__(self, -- GitLab