You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
/* This file is the lexical analyzer for GNU C++. */
: &operator_name_info[(int) CODE]); \
oni->identifier = identifier; \
oni->name = NAME; \
- oni->mangled_name = MANGLING; \
+ oni->mangled_name = MANGLING; \
oni->arity = ARITY;
#include "operators.def"
operator_name_info [(int) TRUTH_AND_EXPR].name = "strict &&";
operator_name_info [(int) TRUTH_OR_EXPR].name = "strict ||";
operator_name_info [(int) RANGE_EXPR].name = "...";
- operator_name_info [(int) CONVERT_EXPR].name = "+";
+ operator_name_info [(int) UNARY_PLUS_EXPR].name = "+";
assignment_operator_name_info [(int) EXACT_DIV_EXPR].name
= "(exact /=)";
#define D_EXT 0x01 /* GCC extension */
#define D_ASM 0x02 /* in C99, but has a switch to turn it off */
#define D_OBJC 0x04 /* Objective C++ only */
+#define D_CXX0X 0x08 /* C++0x only */
CONSTRAINT(ridbits_fit, RID_LAST_MODIFIER < sizeof(unsigned long) * CHAR_BIT);
{ "_Complex", RID_COMPLEX, 0 },
{ "__FUNCTION__", RID_FUNCTION_NAME, 0 },
{ "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
- { "__alignof", RID_ALIGNOF, 0 },
+ { "__alignof", RID_ALIGNOF, 0 },
{ "__alignof__", RID_ALIGNOF, 0 },
{ "__asm", RID_ASM, 0 },
{ "__asm__", RID_ASM, 0 },
{ "signed", RID_SIGNED, 0 },
{ "sizeof", RID_SIZEOF, 0 },
{ "static", RID_STATIC, 0 },
+ { "static_assert", RID_STATIC_ASSERT, D_CXX0X },
{ "static_cast", RID_STATCAST, 0 },
{ "struct", RID_STRUCT, 0 },
{ "switch", RID_SWITCH, 0 },
{ "virtual", RID_VIRTUAL, 0 },
{ "void", RID_VOID, 0 },
{ "volatile", RID_VOLATILE, 0 },
- { "wchar_t", RID_WCHAR, 0 },
+ { "wchar_t", RID_WCHAR, 0 },
{ "while", RID_WHILE, 0 },
/* The remaining keywords are specific to Objective-C++. NB:
tree id;
int mask = ((flag_no_asm ? D_ASM : 0)
| D_OBJC
- | (flag_no_gnu_keywords ? D_EXT : 0));
+ | (flag_no_gnu_keywords ? D_EXT : 0)
+ | (flag_cpp0x ? 0 : D_CXX0X));
- ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree));
+ ridpointers = GGC_CNEWVEC (tree, (int) RID_MAX);
for (i = 0; i < ARRAY_SIZE (reswords); i++)
{
id = get_identifier (reswords[i].word);
tree result, x;
enum cpp_ttype t;
- t = c_lex (&x);
+ t = pragma_lex (&result);
if (t == CPP_STRING)
{
- result = x;
- if (c_lex (&x) != CPP_EOF)
+ if (pragma_lex (&x) != CPP_EOF)
warning (0, "junk at end of #pragma %s", name);
return result;
}
if (t == CPP_EOF && opt)
- return 0;
+ return NULL_TREE;
error ("invalid #pragma %s", name);
- return (tree)-1;
+ return error_mark_node;
}
static void
struct c_fileinfo *finfo;
const char *filename;
- if (fname == (tree)-1)
+ if (fname == error_mark_node)
return;
else if (fname == 0)
filename = lbasename (input_filename);
else
filename = ggc_strdup (TREE_STRING_POINTER (fname));
- finfo = get_fileinfo (filename);
+ finfo = get_fileinfo (input_filename);
if (impl_file_chain == 0)
{
const char *filename;
struct impl_files *ifiles = impl_file_chain;
- if (fname == (tree)-1)
+ if (fname == error_mark_node)
return;
if (fname == 0)
filename = ggc_strdup (TREE_STRING_POINTER (fname));
#if 0
/* We currently cannot give this diagnostic, as we reach this point
- only after cpplib has scanned the entire translation unit, so
+ only after cpplib has scanned the entire translation unit, so
cpp_included always returns true. A plausible fix is to compare
the current source-location cookie with the first source-location
cookie (if any) of the filename, but this requires completing the
}
if (ifiles == 0)
{
- ifiles = xmalloc (sizeof (struct impl_files));
+ ifiles = XNEW (struct impl_files);
ifiles->filename = filename;
ifiles->next = impl_file_chain;
impl_file_chain = ifiles;
/* Indicate that this file uses Java-personality exception handling. */
static void
-handle_pragma_java_exceptions (cpp_reader* dfile ATTRIBUTE_UNUSED )
+handle_pragma_java_exceptions (cpp_reader* dfile ATTRIBUTE_UNUSED)
{
tree x;
- if (c_lex (&x) != CPP_EOF)
+ if (pragma_lex (&x) != CPP_EOF)
warning (0, "junk at end of #pragma GCC java_exceptions");
choose_personality_routine (lang_java);
declaration of "f" is available. Historically, G++ and most
other compilers accepted that usage since they deferred all name
lookup until instantiation time rather than doing unqualified
- name lookup at template definition time; explain to the user what
+ name lookup at template definition time; explain to the user what
is going wrong.
Note that we have the exact wording of the following message in
the manual (trouble.texi, node "Name lookup"), so they need to
be kept in synch. */
pedwarn ("there are no arguments to %qD that depend on a template "
- "parameter, so a declaration of %qD must be available",
+ "parameter, so a declaration of %qD must be available",
name, name);
-
+
if (!flag_permissive)
{
static bool hint;
/* All nesting of C++ functions is lexical; there is never a "static
chain" in the sense of GNU C nested functions. */
- if (code == FUNCTION_DECL)
+ if (code == FUNCTION_DECL)
DECL_NO_STATIC_CHAIN (t) = 1;
return t;
}
/* Add DECL_LANG_SPECIFIC info to T. Called from build_lang_decl
- and pushdecl (for functions generated by the backend). */
+ and pushdecl (for functions generated by the back end). */
void
retrofit_lang_decl (tree t)
/* Set up some flags that give proper default behavior. */
if (IS_AGGR_TYPE_CODE (code))
{
- struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
+ struct c_fileinfo *finfo = get_fileinfo (input_filename);
SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, finfo->interface_unknown);
CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
}