diff --git a/src/language.yacc b/src/language.yacc
index 6462e356711f7ca4013224510edc42e4ecaf96a6..9ec5ed70a9a7b9e566b36995e13c71ed0adde815 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -171,7 +171,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.81 1998/04/17 03:18:09 grubba Exp $");
+RCSID("$Id: language.yacc,v 1.82 1998/04/17 17:13:37 hubbe Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -940,6 +940,7 @@ new_local_name: optional_stars F_IDENTIFIER
 
 new_local_name2: F_IDENTIFIER
   {
+    add_ref($<n>0->u.sval.u.string);
     add_local_name($1->u.sval.u.string, $<n>0->u.sval.u.string);
     $$=mknode(F_ASSIGN,mkintnode(0),mklocalnode(islocal($1->u.sval.u.string)));
     free_node($1);
@@ -947,6 +948,7 @@ new_local_name2: F_IDENTIFIER
   | bad_identifier { $$=mkintnode(0); }
   | F_IDENTIFIER '=' safe_expr0
   {
+    add_ref($<n>0->u.sval.u.string);
     add_local_name($1->u.sval.u.string, $<n>0->u.sval.u.string);
     $$=mknode(F_ASSIGN,$3, mklocalnode(islocal($1->u.sval.u.string)));
     free_node($1);
@@ -1849,6 +1851,7 @@ void yyerror(char *str)
 }
 
 /* argument must be a shared string */
+/* Note that this function eats a reference to 'type' */
 void add_local_name(struct pike_string *str,
 		    struct pike_string *type)
 {