[PATCH] dtrace: accept "char const" via pyparsing

Stefan Hajnoczi stefanha@redhat.com
Thu Feb 1 16:17:00 GMT 2018


The widely used "const char" declaration specifier can also be written
as "char const".  While this form is rarely used, currently produces the
following warning from dtrace(1):

  Warning: /usr/bin/dtrace:myapp.dtrace:66: syntax error near:
  probe probe1

  Warning: Proceeding as if --no-pyparsing was given.

This patch extends the pyparsing grammar to accept "char const" as
defined by ISO/IEC 9899:1999 ("C99").  Now "const char", "char const",
and even "const char const" are accepted without a noisy warning.

Note that "const char const" is also valid C and described by the
standard:

  6.7.3 Type qualifiers
  4  If the same qualifier appears more than once in the same
     specifier-qualifier-list, either directly or via one or more
     typedefs, the behavior is the same as if it appeared only once.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 dtrace.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dtrace.in b/dtrace.in
index 25efc253b..a6d407eab 100644
--- a/dtrace.in
+++ b/dtrace.in
@@ -134,7 +134,7 @@ class _PypProvider(_HeaderCreator):
         varname_spec = varname + Optional("[" + array_size + "]")
         struct_decl = Group(oneOf("struct union") + varname + Suppress(nestedExpr('{','}')) + semi)
         enum_decl = Group("enum" + varname + Suppress(nestedExpr('{','}')) + semi)
-        member_decl = Group((Optional(oneOf("struct unsigned const")) + type_name)
+        member_decl = Group((Optional(oneOf("struct unsigned const")) + type_name + Optional(Keyword("const")))
                             + Optional(Word("*"), default="") + Optional(varname_spec))
         struct_typedef = Group(Literal("typedef") + Literal("struct") + varname
                                + Suppress(nestedExpr('{','}'))) + Optional(varname) + semi
-- 
2.14.3



More information about the Systemtap mailing list