[Python-checkins] bpo-40334: Fix build errors and warnings in test_peg_generator (GH-19672)

Pablo Galindo webhook-mailer at python.org
Thu Apr 23 07:42:18 EDT 2020


https://github.com/python/cpython/commit/1df5a9e88c8df1495a2e689d71b34bf0c7d008ea
commit: 1df5a9e88c8df1495a2e689d71b34bf0c7d008ea
branch: master
author: Pablo Galindo <Pablogsal at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-04-23T12:42:13+01:00
summary:

bpo-40334: Fix build errors and warnings in test_peg_generator (GH-19672)

files:
M Parser/pegen/pegen.c
M Parser/pegen/pegen.h
M Tools/peg_generator/pegen/build.py
M Tools/peg_generator/pegen/c_generator.py

diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c
index 44198ab67b8ee..0b70c950d887d 100644
--- a/Parser/pegen/pegen.c
+++ b/Parser/pegen/pegen.c
@@ -640,6 +640,16 @@ _PyPegen_is_memoized(Parser *p, int type, void *pres)
     return 0;
 }
 
+
+int
+_PyPegen_lookahead_with_name(int positive, expr_ty (func)(Parser *), Parser *p)
+{
+    int mark = p->mark;
+    void *res = func(p);
+    p->mark = mark;
+    return (res != NULL) == positive;
+}
+
 int
 _PyPegen_lookahead_with_string(int positive, void *(func)(Parser *, const char *), Parser *p,
                       const char *arg)
@@ -663,7 +673,7 @@ int
 _PyPegen_lookahead(int positive, void *(func)(Parser *), Parser *p)
 {
     int mark = p->mark;
-    void *res = func(p);
+    void *res = (void*)func(p);
     p->mark = mark;
     return (res != NULL) == positive;
 }
diff --git a/Parser/pegen/pegen.h b/Parser/pegen/pegen.h
index 5acd9883f3fd8..a20ec4a0e4274 100644
--- a/Parser/pegen/pegen.h
+++ b/Parser/pegen/pegen.h
@@ -85,6 +85,7 @@ int _PyPegen_insert_memo(Parser *p, int mark, int type, void *node);
 int _PyPegen_update_memo(Parser *p, int mark, int type, void *node);
 int _PyPegen_is_memoized(Parser *p, int type, void *pres);
 
+int _PyPegen_lookahead_with_name(int, expr_ty (func)(Parser *), Parser *);
 int _PyPegen_lookahead_with_string(int, void *(func)(Parser *, const char *), Parser *, const char *);
 int _PyPegen_lookahead_with_int(int, Token *(func)(Parser *, int), Parser *, int);
 int _PyPegen_lookahead(int, void *(func)(Parser *), Parser *);
diff --git a/Tools/peg_generator/pegen/build.py b/Tools/peg_generator/pegen/build.py
index c66dc7ed4b13e..bd792d66074ff 100644
--- a/Tools/peg_generator/pegen/build.py
+++ b/Tools/peg_generator/pegen/build.py
@@ -9,6 +9,7 @@
 from distutils.core import Distribution, Extension
 from distutils.command.clean import clean  # type: ignore
 from distutils.command.build_ext import build_ext  # type: ignore
+from distutils.tests.support import fixup_build_ext
 
 from pegen.c_generator import CParserGenerator
 from pegen.grammar import Grammar
@@ -69,6 +70,7 @@ def compile_c_extension(
     ]
     dist = Distribution({"name": extension_name, "ext_modules": extension})
     cmd = build_ext(dist)
+    fixup_build_ext(cmd)
     cmd.inplace = True
     if build_dir:
         cmd.build_temp = build_dir
diff --git a/Tools/peg_generator/pegen/c_generator.py b/Tools/peg_generator/pegen/c_generator.py
index ce732a09f096b..5b9d80453ca6b 100644
--- a/Tools/peg_generator/pegen/c_generator.py
+++ b/Tools/peg_generator/pegen/c_generator.py
@@ -93,7 +93,9 @@ def lookahead_call_helper(self, node: Lookahead, positive: int) -> Tuple[None, s
         func, args = call.split("(", 1)
         assert args[-1] == ")"
         args = args[:-1]
-        if not args.startswith("p,"):
+        if "name_token" in call:
+            return None, f"_PyPegen_lookahead_with_name({positive}, {func}, {args})"
+        elif not args.startswith("p,"):
             return None, f"_PyPegen_lookahead({positive}, {func}, {args})"
         elif args[2:].strip().isalnum():
             return None, f"_PyPegen_lookahead_with_int({positive}, {func}, {args})"



More information about the Python-checkins mailing list