diff --git a/src/lexer.h b/src/lexer.h
index aad36b9f93ae27e1fdeae3048f3d073af18ad475..f94614ad217a48695440c0f35af6e909a9b97545 100644
--- a/src/lexer.h
+++ b/src/lexer.h
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: lexer.h,v 1.85 2008/07/22 23:35:13 mast Exp $
+|| $Id: lexer.h,v 1.86 2009/04/15 22:07:59 grubba Exp $
 */
 
 /*
@@ -597,8 +597,6 @@ static int low_yylex(struct lex *lex, YYSTYPE *yylval)
 	    return TOK_DEPRECATED_ID;
 	  if(ISWORD("__func__"))
 	    return TOK_FUNCTION_NAME;
-	  if(ISWORD("__OOB__"))
-	    break;
 	  /* Allow triple (or more) underscore for the user, and make sure we
 	   * don't get false matches below for wide strings.
 	   */
@@ -622,7 +620,21 @@ static int low_yylex(struct lex *lex, YYSTYPE *yylval)
 #endif /* SHIFT == 1 */
 #endif /* SHIFT == 0 */
 	    yylval->n=mkstrnode(tmp);
-	    free_string(tmp);
+	    /* - But only for lower case US-ASCII.
+	     * - Upper case is used for symbols intended for #if constant().
+	     */
+	    if (tmp->size_shift) {
+	      free_string(tmp);	    
+	      return TOK_IDENTIFIER;
+	    }
+	    while(len--) {
+	      int c = tmp->str[len];
+	      if ((c >= 'A') && (c <= 'Z')) {
+		free_string(tmp);
+		return TOK_IDENTIFIER;
+	      }
+	    }
+	    free_string(tmp);	    
 	  }
 	  return TOK_RESERVED;
 	}