lex.c (do_identifier): Look for class value even if we don't have a global value.

* lex.c (do_identifier): Look for class value even if we don't
	have a global value.  Do implicit declaration if parsing is 2.
	* semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
	lookup.

From-SVN: r21291
This commit is contained in:
Jason Merrill 1998-07-19 23:47:18 +00:00 committed by Jason Merrill
parent 077e7015e0
commit e13a41239f
3 changed files with 13 additions and 6 deletions

View File

@ -1,3 +1,10 @@
1998-07-19 Jason Merrill <jason@yorick.cygnus.com>
* lex.c (do_identifier): Look for class value even if we don't
have a global value. Do implicit declaration if parsing is 2.
* semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
lookup.
1998-07-19 Mark Mitchell <mark@markmitchell.com> 1998-07-19 Mark Mitchell <mark@markmitchell.com>
* decl.c (pushtag): Revert previous change. * decl.c (pushtag): Revert previous change.

View File

@ -2817,17 +2817,17 @@ do_identifier (token, parsing, args)
tree args; tree args;
{ {
register tree id; register tree id;
int lexing = (parsing == 1);
int in_call = (parsing == 2);
if (! parsing || IDENTIFIER_OPNAME_P (token)) if (! lexing || IDENTIFIER_OPNAME_P (token))
id = lookup_name (token, 0); id = lookup_name (token, 0);
else else
id = lastiddecl; id = lastiddecl;
if (parsing && yychar == YYEMPTY)
yychar = yylex ();
/* Scope class declarations before global /* Scope class declarations before global
declarations. */ declarations. */
if (id && is_global (id) if ((!id || is_global (id))
&& current_class_type != 0 && current_class_type != 0
&& TYPE_SIZE (current_class_type) == 0) && TYPE_SIZE (current_class_type) == 0)
{ {
@ -2894,7 +2894,7 @@ do_identifier (token, parsing, args)
cp_error ("`%D' not defined", token); cp_error ("`%D' not defined", token);
id = error_mark_node; id = error_mark_node;
} }
else if (parsing && (yychar == '(' || yychar == LEFT_RIGHT)) else if (in_call)
{ {
id = implicitly_declare (token); id = implicitly_declare (token);
} }

View File

@ -848,7 +848,7 @@ finish_call_expr (fn, args, koenig)
if (TREE_CODE (fn) == BIT_NOT_EXPR) if (TREE_CODE (fn) == BIT_NOT_EXPR)
fn = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (fn, 0)); fn = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (fn, 0));
else if (TREE_CODE (fn) != TEMPLATE_ID_EXPR) else if (TREE_CODE (fn) != TEMPLATE_ID_EXPR)
fn = do_identifier (fn, 0, args); fn = do_identifier (fn, 2, args);
} }
result = build_x_function_call (fn, args, current_class_ref); result = build_x_function_call (fn, args, current_class_ref);