This fixes another small inefficiency in the Objective-C compiler. When a method invocation is found, and the parser calls objc_build_method_expr() to compile it, it used to invoke it as in
objc_build_message_expr (build_tree_list (rec, args)); this (trivial) patch removes the need to create the temporary tree list, so that the call becomes objc_build_message_expr (rec, args); it's also easier to understand, not just more efficient. The speedup is tiny, as it saves just one allocation per method invocation. It's more about cleaning up the codebase and migrating it from Lisp to C. Ok to commit ? Thanks Index: c-family/c-objc.h =================================================================== --- c-family/c-objc.h (revision 172328) +++ c-family/c-objc.h (working copy) @@ -53,7 +53,7 @@ extern tree objc_is_id (tree); extern void objc_declare_alias (tree, tree); extern void objc_declare_class (tree); extern void objc_declare_protocols (tree, tree); -extern tree objc_build_message_expr (tree); +extern tree objc_build_message_expr (tree, tree); extern tree objc_finish_message_expr (tree, tree, tree, tree*); extern tree objc_build_selector_expr (location_t, tree); extern tree objc_build_protocol_expr (tree); Index: ChangeLog =================================================================== --- ChangeLog (revision 172334) +++ ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-04-12 Nicola Pero <nicola.p...@meta-innovation.com> + + * c-objc.h (objc_build_message_expr): Updated prototype. + * stub-objc.c (objc_build_message_expr): Likewise. + 2011-04-12 Martin Jambor <mjam...@suse.cz> * c-gimplify.c (c_genericize): Call cgraph_get_create_node instead Index: c-family/stub-objc.c =================================================================== --- c-family/stub-objc.c (revision 172328) +++ c-family/stub-objc.c (working copy) @@ -258,7 +258,7 @@ objc_build_selector_expr (location_t ARG_UNUSED (l } tree -objc_build_message_expr (tree ARG_UNUSED (expr)) +objc_build_message_expr (tree ARG_UNUSED (receiver), tree ARG_UNUSED (args)) { return 0; } Index: objc/ChangeLog =================================================================== --- objc/ChangeLog (revision 172328) +++ objc/ChangeLog (working copy) @@ -1,5 +1,11 @@ 2011-04-12 Nicola Pero <nicola.p...@meta-innovation.com> + * objc-act.c (objc_build_message_expr): Accept two arguments + instead of one so that callers can simply pass the arguments + without having to create a temporary chain to hold them. + +2011-04-12 Nicola Pero <nicola.p...@meta-innovation.com> + * objc-act.c (printable_ivar_name): New. (add_instance_variable): Call printable_ivar_name() when an error message needs to be printed. Do not prepare the instance variable Index: objc/objc-act.c =================================================================== --- objc/objc-act.c (revision 172328) +++ objc/objc-act.c (working copy) @@ -5027,14 +5027,13 @@ objc_message_selector (void) (*(<abstract_decl>(*)())_msgSuper)(receiver, selTransTbl[n], ...); */ tree -objc_build_message_expr (tree mess) +objc_build_message_expr (tree receiver, tree message_args) { - tree receiver = TREE_PURPOSE (mess); tree sel_name; #ifdef OBJCPLUS - tree args = TREE_PURPOSE (TREE_VALUE (mess)); + tree args = TREE_PURPOSE (message_args); #else - tree args = TREE_VALUE (mess); + tree args = message_args; #endif tree method_params = NULL_TREE; @@ -5058,7 +5057,7 @@ tree /* Build the parameter list to give to the method. */ if (TREE_CODE (args) == TREE_LIST) #ifdef OBJCPLUS - method_params = chainon (args, TREE_VALUE (TREE_VALUE (mess))); + method_params = chainon (args, TREE_VALUE (message_args)); #else { tree chain = args, prev = NULL_TREE; Index: ChangeLog =================================================================== --- ChangeLog (revision 172328) +++ ChangeLog (working copy) @@ -1,5 +1,11 @@ 2011-04-12 Nicola Pero <nicola.p...@meta-innovation.com> + * c-parser.c (c_parser_initelt): Updated call to + objc_build_message_expr. + (c_parser_postfix_expression): Likewise. + +2011-04-12 Nicola Pero <nicola.p...@meta-innovation.com> + * c-parser.c (c_lex_one_token): Rewritten conditional used when compiling Objective-C to be more efficient. Index: cp/ChangeLog =================================================================== --- cp/ChangeLog (revision 172328) +++ cp/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-04-12 Nicola Pero <nicola.p...@meta-innovation.com> + + * parser.c (cp_parser_objc_message_expression): Updated call + to objc_build_message_expr. + 2011-04-12 Martin Jambor <mjam...@suse.cz> * class.c (cp_fold_obj_type_ref): Call cgraph_get_node instead of Index: cp/parser.c =================================================================== --- cp/parser.c (revision 172328) +++ cp/parser.c (working copy) @@ -21289,7 +21289,7 @@ cp_parser_objc_message_expression (cp_parser* pars messageargs = cp_parser_objc_message_args (parser); cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE); - return objc_build_message_expr (build_tree_list (receiver, messageargs)); + return objc_build_message_expr (receiver, messageargs); } /* Parse an objc-message-receiver. Index: c-parser.c =================================================================== --- c-parser.c (revision 172328) +++ c-parser.c (working copy) @@ -3788,7 +3788,7 @@ c_parser_initelt (c_parser *parser, struct obstack c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE, "expected %<]%>"); mexpr.value - = objc_build_message_expr (build_tree_list (rec, args)); + = objc_build_message_expr (rec, args); mexpr.original_code = ERROR_MARK; mexpr.original_type = NULL; /* Now parse and process the remainder of the @@ -6455,8 +6455,7 @@ c_parser_postfix_expression (c_parser *parser) args = c_parser_objc_message_args (parser); c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE, "expected %<]%>"); - expr.value = objc_build_message_expr (build_tree_list (receiver, - args)); + expr.value = objc_build_message_expr (receiver, args); break; } /* Else fall through to report error. */