[hawkmoth] [PATCH 1/2] parser: simplify macro arguments extraction

  • From: Bruno Santos <brunomanuelsantos@xxxxxxxxxxxxxxxxxx>
  • To: Jani Nikula <jani@xxxxxxxxxx>, hawkmoth mailing list <hawkmoth@xxxxxxxxxxxxx>
  • Date: Sat, 12 Oct 2019 17:48:00 +0200

Previous solution required an extra dependency on itertools and it was
arguably uglier than what can be achieved in idiomatic Python. This
patch doesn't change behaviour in any way and it's purely stylistic.
---

By the way I removed the cursor.spelling comparison with the 1st token,
which I believe is useless. Was there a reason for that?

 hawkmoth/parser.py | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/hawkmoth/parser.py b/hawkmoth/parser.py
index 9c1ec58..639b63d 100644
--- a/hawkmoth/parser.py
+++ b/hawkmoth/parser.py
@@ -34,7 +34,6 @@
 """
 
 import enum
-import itertools
 import sys
 
 from clang.cindex import CursorKind, TypeKind
@@ -129,16 +128,18 @@ def _get_macro_args(cursor):
     if cursor.kind != CursorKind.MACRO_DEFINITION:
         return None
 
+    tokens = cursor.get_tokens()
+
     # Use the first two tokens to make sure this starts with 'IDENTIFIER('
-    x = [token for token in itertools.islice(cursor.get_tokens(), 2)]
-    if (len(x) != 2 or x[0].spelling != cursor.spelling or
-        x[1].spelling != '(' or x[0].extent.end != x[1].extent.start):
+    one = next(tokens)
+    two = next(tokens, None)
+    if two is None or one.extent.end != two.extent.start or two.spelling != 
'(':
         return None
 
     # Naïve parsing of macro arguments
     # FIXME: This doesn't handle GCC named vararg extension FOO(vararg...)
     args = []
-    for token in itertools.islice(cursor.get_tokens(), 2, None):
+    for token in tokens:
         if token.spelling == ')':
             return args
         elif token.spelling == ',':
-- 
2.23.0


Other related posts:

  • » [hawkmoth] [PATCH 1/2] parser: simplify macro arguments extraction - Bruno Santos