diff --git a/src/language.yacc b/src/language.yacc index ee7809fb03cf2947cbc553e5d579f5eb7d58f243..dee271566333509d5d506283ad44a09f91c07366 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -109,7 +109,7 @@ /* This is the grammar definition of Pike. */ #include "global.h" -RCSID("$Id: language.yacc,v 1.187 2000/06/09 19:00:47 mast Exp $"); +RCSID("$Id: language.yacc,v 1.188 2000/06/21 00:56:02 hubbe Exp $"); #ifdef HAVE_MEMORY_H #include <memory.h> #endif @@ -1624,8 +1624,14 @@ local_function: TOK_IDENTIFIER push_compiler_frame1 func_args { $$=copy_node(compiler_frame->variable[localid].def); }else{ - $$ = mknode(F_ASSIGN, mktrampolinenode($<number>3), - mklocalnode(localid,0)); + if(compiler_frame->lexical_scope & SCOPE_SCOPE_USED) + { + $$ = mknode(F_ASSIGN, mktrampolinenode($<number>3), + mklocalnode(localid,0)); + }else{ + $$ = mknode(F_ASSIGN, mkidentifiernode($<number>3), + mklocalnode(localid,0)); + } } } | TOK_IDENTIFIER push_compiler_frame1 error @@ -1737,8 +1743,14 @@ local_function2: optional_stars TOK_IDENTIFIER push_compiler_frame1 func_args { $$=copy_node(compiler_frame->variable[localid].def); }else{ - $$ = mknode(F_ASSIGN, mktrampolinenode($<number>5), - mklocalnode(localid,0)); + if(compiler_frame->lexical_scope & SCOPE_SCOPE_USED) + { + $$ = mknode(F_ASSIGN, mktrampolinenode($<number>5), + mklocalnode(localid,0)); + }else{ + $$ = mknode(F_ASSIGN, mkidentifiernode($<number>5), + mklocalnode(localid,0)); + } } } | optional_stars TOK_IDENTIFIER push_compiler_frame1 error