From a66319ad8da927ea09b628eb96830b2abed2eadb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Fri, 17 Apr 1998 05:18:09 +0200
Subject: [PATCH] Added check for bad identifiers in assignment expressions
 too.

Rev: src/language.yacc:1.81
---
 src/language.yacc | 45 +++++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/language.yacc b/src/language.yacc
index c4058427a9..6462e35671 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.80 1998/04/17 02:53:10 grubba Exp $");
+RCSID("$Id: language.yacc,v 1.81 1998/04/17 03:18:09 grubba Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -1311,9 +1311,11 @@ expr00: expr0
 expr0: expr01
   | expr4 '=' expr0  { $$=mknode(F_ASSIGN,$3,$1); }
   | expr4 '=' error { $$=$1; reset_type_stack(); yyerrok; }
+  | bad_expr_ident '=' expr0 { $$=$3; }
   | '[' low_lvalue_list ']' '=' expr0  { $$=mknode(F_ASSIGN,$5,mknode(F_ARRAY_LVALUE,$2,0)); }
   | expr4 assign expr0  { $$=mknode($2,$1,$3); }
   | expr4 assign error { $$=$1; reset_type_stack(); yyerrok; }
+  | bad_expr_ident assign expr0 { $$=$3; }
   | '[' low_lvalue_list ']' assign expr0  { $$=mknode($4,mknode(F_ARRAY_LVALUE,$2,0),$5); }
   | '[' low_lvalue_list ']' error { $$=$2; reset_type_stack(); yyerrok; }
 /*  | error { $$=0; reset_type_stack(); } */
@@ -1726,27 +1728,9 @@ bad_identifier: bad_lvalue
   { yyerror("class is a reserved word."); }
   ;
 
-bad_lvalue:
-    F_INLINE
-  { yyerror("inline is a reserved word."); }
-  | F_LOCAL_ID
-  { yyerror("local is a reserved word."); }
-  | F_NO_MASK
-  { yyerror("nomask is a reserved word."); }
-  | F_PREDEF
-  { yyerror("predef is a reserved word."); }
-  | F_PRIVATE
-  { yyerror("private is a reserved word."); }
-  | F_PROTECTED
-  { yyerror("protected is a reserved word."); }
-  | F_PUBLIC
-  { yyerror("public is a reserved word."); }
-  | F_STATIC
-  { yyerror("static is a reserved word."); }
+bad_lvalue: bad_expr_ident
   | F_ARRAY_ID
   { yyerror("array is a reserved word."); }
-  | F_FINAL_ID
-  { yyerror("final is a reserved word.");}
   | F_FLOAT_ID
   { yyerror("float is a reserved word.");}
   | F_FUNCTION_ID
@@ -1767,6 +1751,27 @@ bad_lvalue:
   { yyerror("string is a reserved word."); }
   | F_VOID_ID
   { yyerror("void is a reserved word."); }
+  ;
+
+bad_expr_ident:
+    F_INLINE
+  { yyerror("inline is a reserved word."); }
+  | F_LOCAL_ID
+  { yyerror("local is a reserved word."); }
+  | F_NO_MASK
+  { yyerror("nomask is a reserved word."); }
+  | F_PREDEF
+  { yyerror("predef is a reserved word."); }
+  | F_PRIVATE
+  { yyerror("private is a reserved word."); }
+  | F_PROTECTED
+  { yyerror("protected is a reserved word."); }
+  | F_PUBLIC
+  { yyerror("public is a reserved word."); }
+  | F_STATIC
+  { yyerror("static is a reserved word."); }
+  | F_FINAL_ID
+  { yyerror("final is a reserved word.");}
   | F_DO
   { yyerror("do is a reserved word."); }
   | F_ELSE
-- 
GitLab