Author: markj
Date: Fri Dec 26 22:52:43 2014
New Revision: 276266
URL: https://svnweb.freebsd.org/changeset/base/276266

Log:
  MFC r272671:
  Treat D keywords as identifiers in certain postfix expressions. This allows
  one to, for example, access the "provider" field of a struct g_consumer,
  even though "provider" is a D keyword.
  
  PR:   169657

Modified:
  stable/9/cddl/contrib/opensolaris/lib/libdtrace/common/dt_grammar.y
Directory Properties:
  stable/9/cddl/contrib/opensolaris/   (props changed)
  stable/9/cddl/contrib/opensolaris/lib/libdtrace/common/   (props changed)

Modified: stable/9/cddl/contrib/opensolaris/lib/libdtrace/common/dt_grammar.y
==============================================================================
--- stable/9/cddl/contrib/opensolaris/lib/libdtrace/common/dt_grammar.y Fri Dec 
26 22:50:34 2014        (r276265)
+++ stable/9/cddl/contrib/opensolaris/lib/libdtrace/common/dt_grammar.y Fri Dec 
26 22:52:43 2014        (r276266)
@@ -204,6 +204,8 @@
 %type  <l_tok>         unary_operator
 %type  <l_tok>         struct_or_union
 
+%type  <l_str>         dtrace_keyword_ident
+
 %%
 
 dtrace_program: d_expression DT_TOK_EOF { return (dt_node_root($1)); }
@@ -388,12 +390,18 @@ postfix_expression:
        |       postfix_expression DT_TOK_DOT DT_TOK_TNAME {
                        $$ = OP2(DT_TOK_DOT, $1, dt_node_ident($3));
                }
+       |       postfix_expression DT_TOK_DOT dtrace_keyword_ident {
+                       $$ = OP2(DT_TOK_DOT, $1, dt_node_ident($3));
+               }
        |       postfix_expression DT_TOK_PTR DT_TOK_IDENT {
                        $$ = OP2(DT_TOK_PTR, $1, dt_node_ident($3));
                }
        |       postfix_expression DT_TOK_PTR DT_TOK_TNAME {
                        $$ = OP2(DT_TOK_PTR, $1, dt_node_ident($3));
                }
+       |       postfix_expression DT_TOK_PTR dtrace_keyword_ident {
+                       $$ = OP2(DT_TOK_PTR, $1, dt_node_ident($3));
+               }
        |       postfix_expression DT_TOK_ADDADD {
                        $$ = OP1(DT_TOK_POSTINC, $1);
                }
@@ -408,6 +416,10 @@ postfix_expression:
                    DT_TOK_TNAME DT_TOK_RPAR {
                        $$ = dt_node_offsetof($3, $5);
                }
+       |       DT_TOK_OFFSETOF DT_TOK_LPAR type_name DT_TOK_COMMA
+                   dtrace_keyword_ident DT_TOK_RPAR {
+                       $$ = dt_node_offsetof($3, $5);
+               }
        |       DT_TOK_XLATE DT_TOK_LT type_name DT_TOK_GT
                    DT_TOK_LPAR expression DT_TOK_RPAR {
                        $$ = OP2(DT_TOK_XLATE, dt_node_type($3), $6);
@@ -831,4 +843,15 @@ function_parameters:
        |       parameter_type_list     { $$ = $1; }
        ;
 
+dtrace_keyword_ident:
+         DT_KEY_PROBE { $$ = DUP("probe"); }
+       | DT_KEY_PROVIDER { $$ = DUP("provider"); }
+       | DT_KEY_SELF { $$ = DUP("self"); }
+       | DT_KEY_STRING { $$ = DUP("string"); }
+       | DT_TOK_STRINGOF { $$ = DUP("stringof"); }
+       | DT_KEY_USERLAND { $$ = DUP("userland"); }
+       | DT_TOK_XLATE { $$ = DUP("xlate"); }
+       | DT_KEY_XLATOR { $$ = DUP("translator"); }
+       ;
+
 %%
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to