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:
parent
077e7015e0
commit
e13a41239f
@ -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.
|
||||||
|
10
gcc/cp/lex.c
10
gcc/cp/lex.c
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user