Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1001)

Unified Diff: gdb/ada-lex.l

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/ada-lex.c ('k') | gdb/ada-operator.def » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/ada-lex.l
diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l
index 714265ef385ef3d9cf130cf6c9facae91e704847..e9cda4ae27f59f8829d5ee16b3bef35d93b6f137 100644
--- a/gdb/ada-lex.l
+++ b/gdb/ada-lex.l
@@ -1,6 +1,5 @@
/* FLEX lexer for Ada expressions, for GDB.
- Copyright (C) 1994, 1997-1998, 2000-2003, 2007-2012 Free Software
- Foundation, Inc.
+ Copyright (C) 1994-2013 Free Software Foundation, Inc.
This file is part of GDB.
@@ -54,6 +53,7 @@ static int processReal (const char *);
static struct stoken processId (const char *, int);
static int processAttribute (const char *);
static int find_dot_all (const char *);
+static void rewind_to_char (int);
#undef YY_DECL
#define YY_DECL static int yylex ( void )
@@ -158,18 +158,19 @@ static int find_dot_all (const char *);
if {
- while (*lexptr != 'i' && *lexptr != 'I')
- lexptr -= 1;
- yyrestart(NULL);
+ rewind_to_char ('i');
return 0;
}
-(task|thread) {
+task {
+ rewind_to_char ('t');
+ return 0;
+ }
+
+thread{WHITE}+{DIG} {
/* This keyword signals the end of the expression and
will be processed separately. */
- while (*lexptr != 't' && *lexptr != 'T')
- lexptr--;
- yyrestart(NULL);
+ rewind_to_char ('t');
return 0;
}
@@ -219,8 +220,7 @@ false { return FALSEKEYWORD; }
"," { if (paren_depth == 0 && comma_terminates)
{
- lexptr -= 1;
- yyrestart(NULL);
+ rewind_to_char (',');
return 0;
}
else
@@ -230,8 +230,7 @@ false { return FALSEKEYWORD; }
"(" { paren_depth += 1; return '('; }
")" { if (paren_depth == 0)
{
- lexptr -= 1;
- yyrestart(NULL);
+ rewind_to_char (')');
return 0;
}
else
@@ -289,7 +288,7 @@ false { return FALSEKEYWORD; }
%%
#include <ctype.h>
-#include "gdb_string.h"
+#include <string.h>
/* Initialize the lexer for processing new expression. */
@@ -330,8 +329,7 @@ processInt (const char *base0, const char *num0, const char *exp0)
ULONGEST result;
long exp;
int base;
-
- char *trailer;
+ const char *trailer;
if (base0 == NULL)
base = 10;
@@ -348,7 +346,7 @@ processInt (const char *base0, const char *num0, const char *exp0)
exp = strtol(exp0, (char **) NULL, 10);
errno = 0;
- result = strtoulst (num0, (const char **) &trailer, base);
+ result = strtoulst (num0, &trailer, base);
if (errno == ERANGE)
error (_("Integer literal out of range"));
if (isxdigit(*trailer))
@@ -499,7 +497,8 @@ processString (const char *text, int len)
const char *lim = text + len;
struct stoken result;
- q = result.ptr = obstack_alloc (&temp_parse_space, len);
+ q = obstack_alloc (&temp_parse_space, len);
+ result.ptr = q;
p = text;
while (p < lim)
{
@@ -538,19 +537,20 @@ static int
find_dot_all (const char *str)
{
int i;
- for (i = 0; str[i] != '\000'; i += 1)
- {
- if (str[i] == '.')
- {
- int i0 = i;
- do
- i += 1;
- while (isspace (str[i]));
- if (strncmp (str+i, "all", 3) == 0
- && ! isalnum (str[i+3]) && str[i+3] != '_')
- return i0;
- }
- }
+
+ for (i = 0; str[i] != '\000'; i++)
+ if (str[i] == '.')
+ {
+ int i0 = i;
+
+ do
+ i += 1;
+ while (isspace (str[i]));
+
+ if (strncasecmp (str + i, "all", 3) == 0
+ && !isalnum (str[i + 3]) && str[i + 3] != '_')
+ return i0;
+ }
return -1;
}
@@ -617,6 +617,23 @@ processAttribute (const char *str)
return attributes[k].code;
}
+/* Back up lexptr by yyleng and then to the rightmost occurrence of
+ character CH, case-folded (there must be one). WARNING: since
+ lexptr points to the next input character that Flex has not yet
+ transferred to its internal buffer, the use of this function
+ depends on the assumption that Flex calls YY_INPUT only when it is
+ logically necessary to do so (thus, there is no reading ahead
+ farther than needed to identify the next token.) */
+
+static void
+rewind_to_char (int ch)
+{
+ lexptr -= yyleng;
+ while (toupper (*lexptr) != toupper (ch))
+ lexptr -= 1;
+ yyrestart (NULL);
+}
+
int
yywrap(void)
{
« no previous file with comments | « gdb/ada-lex.c ('k') | gdb/ada-operator.def » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698