From: Ian Lance Taylor Date: Tue, 21 Dec 2010 18:51:45 +0000 (+0000) Subject: Correct lexing of exponents. X-Git-Tag: releases/gcc-4.6.0~1702 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=093e6632429ed7fdadf22e031875aef628f261fc;p=thirdparty%2Fgcc.git Correct lexing of exponents. From-SVN: r168129 --- diff --git a/gcc/go/gofrontend/lex.cc b/gcc/go/gofrontend/lex.cc index ad1a1fe4fc74..67d4b1b4670d 100644 --- a/gcc/go/gofrontend/lex.cc +++ b/gcc/go/gofrontend/lex.cc @@ -931,6 +931,25 @@ Lex::is_hex_digit(char c) || (c >= 'a' && c <= 'f')); } +// Return whether an exponent could start at P. + +bool +Lex::could_be_exponent(const char* p, const char* pend) +{ + if (*p != 'e' && *p != 'E') + return false; + ++p; + if (p >= pend) + return false; + if (*p == '+' || *p == '-') + { + ++p; + if (p >= pend) + return false; + } + return *p >= '0' && *p <= '9'; +} + // Pick up a number. Token @@ -980,7 +999,7 @@ Lex::gather_number() } } - if (*p != '.' && *p != 'e' && *p != 'E' && *p != 'i') + if (*p != '.' && *p != 'i' && !Lex::could_be_exponent(p, pend)) { std::string s(pnum, p - pnum); mpz_t val; @@ -1004,7 +1023,7 @@ Lex::gather_number() ++p; } - if (*p != '.' && *p != 'E' && *p != 'e' && *p != 'i') + if (*p != '.' && *p != 'i' && !Lex::could_be_exponent(p, pend)) { std::string s(pnum, p - pnum); mpz_t val; @@ -1039,7 +1058,7 @@ Lex::gather_number() ++p; } - if (dot && (*p == 'E' || *p == 'e')) + if (dot && Lex::could_be_exponent(p, pend)) { ++p; if (*p == '+' || *p == '-') diff --git a/gcc/go/gofrontend/lex.h b/gcc/go/gofrontend/lex.h index c8def2bf7d5f..4202ed3748cd 100644 --- a/gcc/go/gofrontend/lex.h +++ b/gcc/go/gofrontend/lex.h @@ -379,6 +379,9 @@ class Lex Token gather_identifier(); + static bool + could_be_exponent(const char*, const char*); + Token gather_number();