Patchwork Add arguments to plug functions

login
register
mail settings
Submitter Mike Stump
Date Feb. 13, 2011, 10:30 a.m.
Message ID <9F48F549-7FBC-4221-91C1-CAA94A29B8F1@comcast.net>
Download mbox | patch
Permalink /patch/82977/
State New
Headers show

Comments

Mike Stump - Feb. 13, 2011, 10:30 a.m.
objcp:
	* plugin/parser.h: Add arguments to all plugins.
cp:
	* parser.c (cp_parser_primary_expression): Add arguments to all the plugins.
objcp:
	* plugin/parser.h: Add arguments to all plugins.
cp:
	* parser.c (cp_parser_primary_expression): Add arguments to all the plugins.

Patch

Index: objcp/plugin/parser.h
===================================================================
--- objcp/plugin/parser.h	(revision 170104)
+++ objcp/plugin/parser.h	(working copy)
@@ -127,7 +127,7 @@ 
    break;@)
 
 
-#define PLUGIN_DECLARATION @(
+#define PLUGIN_DECLARATION(token1, attributes) @(
   /* Objective-C++ declaration/definition.  */
   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
     cp_parser_objc_declaration (parser, NULL_TREE);
@@ -136,7 +136,7 @@ 
 	   && cp_parser_objc_valid_prefix_attributes (parser, &attributes))
     cp_parser_objc_declaration (parser, attributes);@)
 
-#define PLUGIN_SIMPLE_TYPE_SPECIFIER @(
+#define PLUGIN_SIMPLE_TYPE_SPECIFIER(parser, type, decl_specs)  @(
   do {
     /* See if TYPE is an Objective-C type, and if so, parse and
        accept any protocol references following it.  Do this before
@@ -160,7 +160,7 @@ 
   } while (0)@)
 
 
-#define PLUGIN_NONCLASS_NAME1 @(
+#define PLUGIN_NONCLASS_NAME1(parser, type_decl, identifier) @(
   do {
     if (TREE_CODE (type_decl) != TYPE_DECL
 	&& (objc_is_id (identifier) || objc_is_class_name (identifier)))
@@ -173,7 +173,7 @@ 
       }
   } while (0)@)
 
-#define PLUGIN_NONCLASS_NAME @(
+#define PLUGIN_NONCLASS_NAME(parser, type_decl, cp_lexer_peek_token) @(
   /* In Objective-C, we have the complication that class names are
      normally type names and start declarations (eg, the
      "NSObject" in "NSObject *object;"), but can be used in an
@@ -183,14 +183,14 @@ 
   || (objc_is_class_name (TREE_TYPE (type_decl))
       && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT)@)
 
-#define PLUGIN_CLASS_NAME @(
+#define PLUGIN_CLASS_NAME(parser, cp_lexer_peek_token, CPP_DOT) @(
   /* In Objective-C 2.0, a classname followed by '.' starts a
      dot-syntax expression, and it's not a type-name.  */
   || (c_dialect_objc ()
       && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT 
       && objc_is_class_name (decl))@)
 
-#define PLUGIN_MEMBER_DECLARATION @(
+#define PLUGIN_MEMBER_DECLARATION(parser, cp_lexer_next_token_is_keyword, finish_member_declaration) @(
   do {
     /* Check for @defs.  */
     if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
@@ -217,11 +217,11 @@ 
 #define PLUGIN_PRIMARY_EXPRESSION(parser, decl, cp_lexer_consume_token, cp_lexer_peek_token)
 #define PLUGIN_TOKEN_STARTS_CAST_EXPR
 #define PLUGIN_STATEMENT
-#define PLUGIN_DECLARATION
-#define PLUGIN_SIMPLE_TYPE_SPECIFIER
-#define PLUGIN_NONCLASS_NAME1
-#define PLUGIN_NONCLASS_NAME
-#define PLUGIN_CLASS_NAME
-#define PLUGIN_MEMBER_DECLARATION
+#define PLUGIN_DECLARATION(token1, attributes)
+#define PLUGIN_SIMPLE_TYPE_SPECIFIER(parser, type, decl_specs)
+#define PLUGIN_NONCLASS_NAME1(parser, type_decl, identifier)
+#define PLUGIN_NONCLASS_NAME(parser, type_decl, cp_lexer_peek_token) 
+#define PLUGIN_CLASS_NAME(parser, cp_lexer_peek_token, CPP_DOT)
+#define PLUGIN_MEMBER_DECLARATION(parser, cp_lexer_next_token_is_keyword, finish_member_declaration)
 
 #endif
Index: cp/parser.c
===================================================================
--- cp/parser.c	(revision 170104)
+++ cp/parser.c	(working copy)
@@ -3671,11 +3671,11 @@ 
       }
 
     case CPP_OPEN_SQUARE:
-      PLUGIN_PRIMARY_EXPRESSION_3(parser);
+      PLUGIN_PRIMARY_EXPRESSION_3 (parser);
       maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
       return cp_parser_lambda_expression (parser);
 
-    PLUGIN_PRIMARY_EXPRESSION_2(parser, cp_parser_error)
+    PLUGIN_PRIMARY_EXPRESSION_2 (parser, cp_parser_error)
 
     case CPP_KEYWORD:
       switch (token->keyword)
@@ -3806,7 +3806,7 @@ 
 	case RID_IS_LITERAL_TYPE:
 	  return cp_parser_trait_expr (parser, token->keyword);
 
-	PLUGIN_PRIMARY_EXPRESSION_1(parser)
+	PLUGIN_PRIMARY_EXPRESSION_1 (parser)
 
 	case RID_TEMPLATE:
 	  if (parser->in_function_body
@@ -9401,7 +9401,7 @@ 
   else if (token1.keyword == RID_INLINE
 	   && token2.keyword == RID_NAMESPACE)
     cp_parser_namespace_definition (parser);
-  PLUGIN_DECLARATION
+  PLUGIN_DECLARATION (token1, attributes)
   /* We must have either a block declaration or a function
      definition.  */
   else
@@ -12800,7 +12800,7 @@ 
 
   if (type && type != error_mark_node)
     {
-      PLUGIN_SIMPLE_TYPE_SPECIFIER;
+      PLUGIN_SIMPLE_TYPE_SPECIFIER (parser, type, decl_specs);
 
       /* There is no valid C++ program where a non-template type is
 	 followed by a "<".  That usually indicates that the user
@@ -12876,11 +12876,11 @@ 
   /* Look up the type-name.  */
   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
 
-  PLUGIN_NONCLASS_NAME1;
+  PLUGIN_NONCLASS_NAME1 (parser, type_decl, identifier);
 
   /* Issue an error if we did not find a type-name.  */
   if (TREE_CODE (type_decl) != TYPE_DECL
-      PLUGIN_NONCLASS_NAME)
+      PLUGIN_NONCLASS_NAME (parser, type_decl, cp_lexer_peek_token))
     {
       if (!cp_parser_simulate_error (parser))
 	cp_parser_name_lookup_error (parser, identifier, type_decl,
@@ -16724,7 +16724,7 @@ 
   else if (TREE_CODE (decl) != TYPE_DECL
 	   || TREE_TYPE (decl) == error_mark_node
 	   || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
-	   PLUGIN_CLASS_NAME)
+	   PLUGIN_CLASS_NAME (parser, cp_lexer_peek_token, CPP_DOT))
     decl = error_mark_node;
 
   if (decl == error_mark_node)
@@ -17585,7 +17585,8 @@ 
       return;
     }
 
-  PLUGIN_MEMBER_DECLARATION;
+  PLUGIN_MEMBER_DECLARATION (parser, cp_lexer_next_token_is_keyword,
+			     finish_member_declaration);
 
   /* If the next token is `static_assert' we have a static assertion.  */
   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))