mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-12 08:54:32 +08:00
ChangeLog: New.
* ChangeLog: New. * Make-lang.in: Likewise. * config-lang.in: Likewise. * lang-specs.h: Likewise. * objcp-decl.c: Likewise. * objcp-decl.h: Likewise. * objcp-lang.c: Likewise. From-SVN: r98530
This commit is contained in:
parent
dbb743654f
commit
b2e61dde5c
9
gcc/objcp/ChangeLog
Normal file
9
gcc/objcp/ChangeLog
Normal file
@ -0,0 +1,9 @@
|
||||
2005-04-21 Mike Stump <mrs@apple.com>
|
||||
|
||||
* ChangeLog: New.
|
||||
* Make-lang.in: Likewise.
|
||||
* config-lang.in: Likewise.
|
||||
* lang-specs.h: Likewise.
|
||||
* objcp-decl.c: Likewise.
|
||||
* objcp-decl.h: Likewise.
|
||||
* objcp-lang.c: Likewise.
|
138
gcc/objcp/Make-lang.in
Normal file
138
gcc/objcp/Make-lang.in
Normal file
@ -0,0 +1,138 @@
|
||||
# Top level -*- makefile -*- fragment for GNU Objective-C++
|
||||
# Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
# Contributed by Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
#This file is part of GCC.
|
||||
|
||||
#GCC is free software; you can redistribute it and/or modify
|
||||
#it under the terms of the GNU General Public License as published by
|
||||
#the Free Software Foundation; either version 2, or (at your option)
|
||||
#any later version.
|
||||
|
||||
#GCC is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
|
||||
#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.
|
||||
|
||||
# This file provides the language dependent support in the main Makefile.
|
||||
# Each language makefile fragment must provide the following targets:
|
||||
#
|
||||
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
|
||||
# foo.install-normal, foo.install-common, foo.install-man,
|
||||
# foo.uninstall,
|
||||
# foo.mostlyclean, foo.clean, foo.distclean,
|
||||
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
|
||||
#
|
||||
# where `foo' is the name of the language.
|
||||
#
|
||||
# It should also provide rules for:
|
||||
#
|
||||
# - making any compiler driver (eg: g++)
|
||||
# - the compiler proper (eg: cc1plus)
|
||||
# - define the names for selecting the language in LANGUAGES.
|
||||
|
||||
#
|
||||
# Define the names for selecting Objective-C++ in LANGUAGES.
|
||||
OBJ-C++ obj-c++: cc1objplus$(exeext)
|
||||
|
||||
# Tell GNU make to ignore these if they exist.
|
||||
.PHONY: Obj-c++ obj-C++
|
||||
|
||||
# Use maximal warnings for this front end. Also, make ObjC and C++
|
||||
# headers accessible.
|
||||
objcp-warn = $(STRICT_WARN) -DOBJCPLUS -I$(srcdir)/objc -I$(srcdir)/cp
|
||||
|
||||
# Language-specific object files for Objective C++.
|
||||
OBJCXX_OBJS = objcp/objcp-act.o objcp/objcp-lang.o objcp/objcp-decl.o \
|
||||
$(CXX_AND_OBJCXX_OBJS)
|
||||
|
||||
cc1objplus$(exeext): $(OBJCXX_OBJS) $(BACKEND) $(LIBDEPS)
|
||||
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
|
||||
$(OBJCXX_OBJS) $(BACKEND) $(LIBS)
|
||||
|
||||
# Objective C++ language specific files.
|
||||
|
||||
objcp/objcp-lang.o : objcp/objcp-lang.c \
|
||||
$(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h objc/objc-act.h \
|
||||
$(LANGHOOKS_DEF_H) c-common.h gtype-objcp.h $(CXX_PRETTY_PRINT_H) \
|
||||
$(DIAGNOSTIC_H) cp/cp-objcp-common.h
|
||||
|
||||
objcp/objcp-decl.o : objcp/objcp-decl.c \
|
||||
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
|
||||
toplev.h $(GGC_H) c-pragma.h input.h flags.h output.h objc/objc-act.h \
|
||||
objcp/objcp-decl.h
|
||||
|
||||
# The following must be an explicit rule; please keep in sync with the implicit
|
||||
# one in Makefile.in.
|
||||
objcp/objcp-act.o : objc/objc-act.c \
|
||||
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(TM_P_H) \
|
||||
$(EXPR_H) $(TARGET_H) $(CXX_TREE_H) diagnostic.h toplev.h flags.h \
|
||||
objc/objc-act.h input.h function.h output.h debug.h langhooks.h \
|
||||
objcp/objcp-decl.h $(LANGHOOKS_DEF_H) $(HASHTAB_H) gt-objc-objc-act.h
|
||||
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
|
||||
|
||||
po-generated:
|
||||
|
||||
gtype-objcp.h : s-gtype ; @true
|
||||
|
||||
#
|
||||
# Build hooks:
|
||||
|
||||
obj-c++.all.build:
|
||||
obj-c++.all.cross:
|
||||
obj-c++.start.encap:
|
||||
obj-c++.rest.encap:
|
||||
obj-c++.info:
|
||||
obj-c++.srcinfo:
|
||||
obj-c++.srcextra:
|
||||
obj-c++.man:
|
||||
|
||||
obj-c++.tags: force
|
||||
cd $(srcdir)/objcp; etags -o TAGS.sub *.y *.c *.h; \
|
||||
etags --include TAGS.sub --include ../TAGS.sub
|
||||
|
||||
lang_checks += check-obj-c++
|
||||
|
||||
#
|
||||
# Install hooks:
|
||||
# cc1objplus is installed elsewhere as part of $(COMPILERS).
|
||||
|
||||
obj-c++.install-normal:
|
||||
|
||||
obj-c++.install-common:
|
||||
|
||||
obj-c++.install-man:
|
||||
|
||||
obj-c++.uninstall:
|
||||
#
|
||||
# Clean hooks:
|
||||
# A lot of the ancillary files are deleted by the main makefile.
|
||||
# We just have to delete files specific to us.
|
||||
obj-c++.mostlyclean:
|
||||
-rm -f objcp/*$(objext)
|
||||
-rm -f objcp/*$(coverageexts)
|
||||
obj-c++.clean: obj-c++.mostlyclean
|
||||
obj-c++.distclean:
|
||||
-rm -f objcp/config.status objcp/Makefile
|
||||
obj-c++.maintainer-clean:
|
||||
|
||||
#
|
||||
# Stage hooks:
|
||||
|
||||
obj-c++.stage1: stage1-start
|
||||
-mv objcp/*$(objext) stage1/objcp
|
||||
obj-c++.stage2: stage2-start
|
||||
-mv objcp/*$(objext) stage2/objcp
|
||||
obj-c++.stage3: stage3-start
|
||||
-mv objcp/*$(objext) stage3/objcp
|
||||
obj-c++.stage4: stage4-start
|
||||
-mv objcp/*$(objext) stage4/objcp
|
||||
obj-c++.stageprofile: stageprofile-start
|
||||
-mv objcp/*$(objext) stageprofile/objcp
|
||||
obj-c++.stagefeedback: stagefeedback-start
|
||||
-mv objcp/*$(objext) stagefeedback/objcp
|
43
gcc/objcp/config-lang.in
Normal file
43
gcc/objcp/config-lang.in
Normal file
@ -0,0 +1,43 @@
|
||||
# Top level configure fragment for GNU Objective-C++.
|
||||
# Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
# Contributed by Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
#This file is part of GCC.
|
||||
|
||||
#GCC is free software; you can redistribute it and/or modify
|
||||
#it under the terms of the GNU General Public License as published by
|
||||
#the Free Software Foundation; either version 2, or (at your option)
|
||||
#any later version.
|
||||
|
||||
#GCC is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
|
||||
#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.
|
||||
|
||||
# Configure looks for the existence of this file to auto-config each language.
|
||||
# We define several parameters used by configure:
|
||||
#
|
||||
# language - name of language as it would appear in $(LANGUAGES)
|
||||
# compilers - value to add to $(COMPILERS)
|
||||
# stagestuff - files to add to $(STAGESTUFF)
|
||||
|
||||
language="obj-c++"
|
||||
|
||||
compilers="cc1objplus\$(exeext)"
|
||||
|
||||
stagestuff=""
|
||||
|
||||
# Per GCC Steering Committee.
|
||||
build_by_default="no"
|
||||
|
||||
# By building the Objective-C and C++ front-ends, we will get
|
||||
# the object files we need, along with the libraries (libstdc++,
|
||||
# libobjc).
|
||||
lang_requires="objc c++"
|
||||
|
||||
gtfiles="\$(srcdir)/objcp/objcp-decl.c \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-act.h \$(srcdir)/cp/mangle.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/call.c \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/parser.c \$(srcdir)/cp/method.c \$(srcdir)/cp/typeck2.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-lex.c \$(srcdir)/c-pragma.c"
|
60
gcc/objcp/lang-specs.h
Normal file
60
gcc/objcp/lang-specs.h
Normal file
@ -0,0 +1,60 @@
|
||||
/* Definitions for specs for Objective-C++.
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Contributed by Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
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. */
|
||||
|
||||
/* This is the contribution to the `default_compilers' array in gcc.c for
|
||||
obj-c++. It is based on -- and should be kept in sync with -- the g++
|
||||
spec (found in cp/lang-specs.h). */
|
||||
|
||||
#ifndef CPLUSPLUS_CPP_SPEC
|
||||
#define CPLUSPLUS_CPP_SPEC 0
|
||||
#endif
|
||||
|
||||
{".mm", "@objective-c++", 0, 0, 0},
|
||||
{".M", "@objective-c++", 0, 0, 0},
|
||||
{"@objective-c++-header",
|
||||
"%{E|M|MM:cc1objplus -E %(cpp_options) %2 %(cpp_debug_options)}\
|
||||
%{!E:%{!M:%{!MM:\
|
||||
%{save-temps|no-integrated-cpp:cc1objplus -E\
|
||||
%(cpp_options) %2 -o %{save-temps:%b.mii} %{!save-temps:%g.mii} \n}\
|
||||
cc1objplus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.mii} %{!save-temps:%g.mii}}\
|
||||
%{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
||||
%(cc1_options) %2 %{+e1*}\
|
||||
-o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
|
||||
CPLUSPLUS_CPP_SPEC, 0, 0},
|
||||
{"@objective-c++",
|
||||
"%{E|M|MM:cc1objplus -E %(cpp_options) %2 %(cpp_debug_options)}\
|
||||
%{!E:%{!M:%{!MM:\
|
||||
%{save-temps|no-integrated-cpp:cc1objplus -E\
|
||||
%(cpp_options) %2 -o %{save-temps:%b.mii} %{!save-temps:%g.mii} \n}\
|
||||
cc1objplus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.mii} %{!save-temps:%g.mii}}\
|
||||
%{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
||||
%(cc1_options) %2 %{+e1*}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}",
|
||||
CPLUSPLUS_CPP_SPEC, 0, 0},
|
||||
{".mii", "@objective-c++-cpp-output", 0, 0, 0},
|
||||
{"@objective-c++-cpp-output",
|
||||
"%{!M:%{!MM:%{!E:\
|
||||
cc1objplus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
{"@objc++-cpp-output",
|
||||
"%{!M:%{!MM:%{!E:\
|
||||
cc1objplus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
134
gcc/objcp/objcp-decl.c
Normal file
134
gcc/objcp/objcp-decl.c
Normal file
@ -0,0 +1,134 @@
|
||||
/* Process the ObjC-specific declarations and variables for
|
||||
the Objective-C++ compiler.
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Contributed by Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2, or (at your option) any later
|
||||
version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
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. */
|
||||
|
||||
#include "config.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
#include "tm.h"
|
||||
#include "tree.h"
|
||||
#include "rtl.h"
|
||||
#include "expr.h"
|
||||
#include "cp-tree.h"
|
||||
#include "c-common.h"
|
||||
#include "flags.h"
|
||||
#include "input.h"
|
||||
#include "except.h"
|
||||
#include "output.h"
|
||||
#include "toplev.h"
|
||||
#include "cpplib.h"
|
||||
#include "debug.h"
|
||||
#include "target.h"
|
||||
#include "varray.h"
|
||||
|
||||
#include "objc-act.h"
|
||||
#include "objcp-decl.h"
|
||||
|
||||
/* Hacks to simulate start_struct() and finish_struct(). */
|
||||
|
||||
tree
|
||||
objcp_start_struct (enum tree_code code ATTRIBUTE_UNUSED, tree name)
|
||||
{
|
||||
tree s;
|
||||
/* The idea here is to mimic the actions that the C++ parser takes when
|
||||
constructing 'extern "C" struct NAME {'. */
|
||||
push_lang_context (lang_name_c);
|
||||
if (!name)
|
||||
name = make_anon_name ();
|
||||
s = xref_tag (record_type, name, ts_current, 0);
|
||||
CLASSTYPE_DECLARED_CLASS (s) = 0; /* this is a 'struct', not a 'class'. */
|
||||
xref_basetypes (s, NULL_TREE); /* no base classes here! */
|
||||
|
||||
return begin_class_definition (s);
|
||||
}
|
||||
|
||||
tree
|
||||
objcp_finish_struct (tree t, tree fieldlist, tree attributes)
|
||||
{
|
||||
tree field, next_field;
|
||||
|
||||
for (field = fieldlist; field; field = next_field)
|
||||
{
|
||||
next_field = TREE_CHAIN (field); /* insert one field at a time; */
|
||||
TREE_CHAIN (field) = NULL_TREE; /* otherwise, grokfield croaks. */
|
||||
finish_member_declaration (field);
|
||||
}
|
||||
t = finish_struct (t, attributes);
|
||||
pop_lang_context ();
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
void
|
||||
objcp_finish_function (void)
|
||||
{
|
||||
/* The C++ flavor of 'finish_function' does not generate RTL -- one has
|
||||
to call 'expand_or_defer_fn' to do that. */
|
||||
expand_or_defer_fn (finish_function (0));
|
||||
}
|
||||
|
||||
tree
|
||||
objcp_lookup_name (tree name)
|
||||
{
|
||||
return lookup_name (name, -1);
|
||||
}
|
||||
|
||||
tree
|
||||
objcp_xref_tag (enum tree_code code ATTRIBUTE_UNUSED, tree name)
|
||||
{
|
||||
return xref_tag (record_type, name, true, false);
|
||||
}
|
||||
|
||||
tree
|
||||
objcp_build_component_ref (tree datum, tree component)
|
||||
{
|
||||
/* The 'build_component_ref' routine has been removed from the C++
|
||||
front-end, but 'finish_class_member_access_expr' seems to be
|
||||
a worthy substitute. */
|
||||
return finish_class_member_access_expr (datum, component);
|
||||
}
|
||||
|
||||
int
|
||||
objcp_comptypes (tree type1, tree type2)
|
||||
{
|
||||
return comptypes (type1, type2, COMPARE_STRICT);
|
||||
}
|
||||
|
||||
tree
|
||||
objcp_begin_compound_stmt (int flags ATTRIBUTE_UNUSED)
|
||||
{
|
||||
return begin_compound_stmt (0);
|
||||
}
|
||||
|
||||
tree
|
||||
objcp_end_compound_stmt (tree stmt, int flags ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* The following has been snarfed from
|
||||
cp/semantics.c:finish_compound_stmt(). */
|
||||
if (TREE_CODE (stmt) == BIND_EXPR)
|
||||
BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
|
||||
else if (STATEMENT_LIST_NO_SCOPE (stmt))
|
||||
stmt = pop_stmt_list (stmt);
|
||||
else
|
||||
stmt = do_poplevel (stmt);
|
||||
|
||||
return stmt;
|
||||
}
|
95
gcc/objcp/objcp-decl.h
Normal file
95
gcc/objcp/objcp-decl.h
Normal file
@ -0,0 +1,95 @@
|
||||
/* Process the ObjC-specific declarations and variables for
|
||||
the Objective-C++ compiler.
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
Contributed by Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2, or (at your option) any later
|
||||
version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef GCC_OBJCP_DECL_H
|
||||
#define GCC_OBJCP_DECL_H
|
||||
|
||||
extern tree objcp_start_struct (enum tree_code, tree);
|
||||
extern tree objcp_finish_struct (tree, tree, tree);
|
||||
extern void objcp_finish_function (void);
|
||||
extern tree objcp_lookup_name (tree);
|
||||
extern tree objcp_build_function_call (tree, tree);
|
||||
extern tree objcp_xref_tag (enum tree_code, tree);
|
||||
extern tree objcp_build_component_ref (tree, tree);
|
||||
extern int objcp_comptypes (tree, tree);
|
||||
extern tree objcp_builtin_function (const char *, tree, int,
|
||||
enum built_in_class, const char *, tree);
|
||||
extern tree objcp_begin_compound_stmt (int);
|
||||
extern tree objcp_end_compound_stmt (tree, int);
|
||||
|
||||
/* Now "cover up" the corresponding C++ functions if required (NB: the
|
||||
OBJCP_ORIGINAL_FUNCTION macro, shown below, can still be used to
|
||||
invoke the original C++ functions if needed). */
|
||||
#ifdef OBJCP_REMAP_FUNCTIONS
|
||||
|
||||
#define start_struct(code, name) \
|
||||
objcp_start_struct (code, name)
|
||||
#define finish_struct(t, fieldlist, attributes) \
|
||||
objcp_finish_struct (t, fieldlist, attributes)
|
||||
#define finish_function() \
|
||||
objcp_finish_function ()
|
||||
#define lookup_name(name) \
|
||||
objcp_lookup_name (name)
|
||||
#define xref_tag(code, name) \
|
||||
objcp_xref_tag (code, name)
|
||||
#define build_component_ref(datum, component) \
|
||||
objcp_build_component_ref (datum, component)
|
||||
#define comptypes(type1, type2) \
|
||||
objcp_comptypes (type1, type2)
|
||||
#define c_begin_compound_stmt(flags) \
|
||||
objcp_begin_compound_stmt (flags)
|
||||
#define c_end_compound_stmt(stmt, flags) \
|
||||
objcp_end_compound_stmt (stmt, flags)
|
||||
|
||||
#undef OBJC_TYPE_NAME
|
||||
#define OBJC_TYPE_NAME(type) \
|
||||
(TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL \
|
||||
? DECL_NAME (TYPE_NAME (type)) \
|
||||
: TYPE_NAME (type))
|
||||
#undef OBJC_SET_TYPE_NAME
|
||||
#define OBJC_SET_TYPE_NAME(type, name) \
|
||||
if(TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL) \
|
||||
DECL_NAME (TYPE_NAME (type)) = name; \
|
||||
else \
|
||||
TYPE_NAME (type) = name;
|
||||
|
||||
#undef TYPE_OBJC_INFO
|
||||
#define TYPE_OBJC_INFO(TYPE) LANG_TYPE_CLASS_CHECK (TYPE)->objc_info
|
||||
#undef SIZEOF_OBJC_TYPE_LANG_SPECIFIC
|
||||
#define SIZEOF_OBJC_TYPE_LANG_SPECIFIC sizeof (struct lang_type_class)
|
||||
#undef ALLOC_OBJC_TYPE_LANG_SPECIFIC
|
||||
#define ALLOC_OBJC_TYPE_LANG_SPECIFIC(NODE) \
|
||||
do { \
|
||||
TYPE_LANG_SPECIFIC (NODE) = GGC_CNEWVAR \
|
||||
(struct lang_type, sizeof (struct lang_type_class)); \
|
||||
TYPE_LANG_SPECIFIC (NODE)->u.c.h.is_lang_type_class = 1; \
|
||||
} while (0)
|
||||
|
||||
#define OBJCP_ORIGINAL_FUNCTION(name, args) (name)args
|
||||
|
||||
/* C++ marks ellipsis-free function parameters differently from C. */
|
||||
#undef OBJC_VOID_AT_END
|
||||
#define OBJC_VOID_AT_END void_list_node
|
||||
|
||||
#endif /* OBJCP_REMAP_FUNCTIONS */
|
||||
|
||||
#endif /* ! GCC_OBJCP_DECL_H */
|
143
gcc/objcp/objcp-lang.c
Normal file
143
gcc/objcp/objcp-lang.c
Normal file
@ -0,0 +1,143 @@
|
||||
/* Language-dependent hooks for Objective-C++.
|
||||
Copyright 2005 Free Software Foundation, Inc.
|
||||
Contributed by Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
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. */
|
||||
|
||||
#include "config.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
#include "tm.h"
|
||||
#include "tree.h"
|
||||
#include "cp-tree.h"
|
||||
#include "c-common.h"
|
||||
#include "toplev.h"
|
||||
#include "objc-act.h"
|
||||
#include "langhooks.h"
|
||||
#include "langhooks-def.h"
|
||||
#include "diagnostic.h"
|
||||
#include "cxx-pretty-print.h"
|
||||
#include "debug.h"
|
||||
#include "cp-objcp-common.h"
|
||||
|
||||
enum c_language_kind c_language = clk_objcxx;
|
||||
|
||||
/* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h;
|
||||
consequently, there should be very few hooks below. */
|
||||
|
||||
#undef LANG_HOOKS_NAME
|
||||
#define LANG_HOOKS_NAME "GNU Objective-C++"
|
||||
#undef LANG_HOOKS_INIT
|
||||
#define LANG_HOOKS_INIT objc_init
|
||||
#undef LANG_HOOKS_DECL_PRINTABLE_NAME
|
||||
#define LANG_HOOKS_DECL_PRINTABLE_NAME objc_printable_name
|
||||
#undef LANG_HOOKS_TYPES_COMPATIBLE_P
|
||||
#define LANG_HOOKS_TYPES_COMPATIBLE_P objc_types_compatible_p
|
||||
#undef LANG_HOOKS_GET_CALLEE_FNDECL
|
||||
#define LANG_HOOKS_GET_CALLEE_FNDECL objc_get_callee_fndecl
|
||||
/* Each front end provides its own lang hook initializer. */
|
||||
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
|
||||
|
||||
/* Tree code classes. */
|
||||
|
||||
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
|
||||
|
||||
const enum tree_code_class tree_code_type[] = {
|
||||
#include "tree.def"
|
||||
tcc_exceptional,
|
||||
#include "c-common.def"
|
||||
tcc_exceptional,
|
||||
#include "cp-tree.def"
|
||||
tcc_exceptional,
|
||||
#include "objc-tree.def"
|
||||
};
|
||||
#undef DEFTREECODE
|
||||
|
||||
/* Table indexed by tree code giving number of expression
|
||||
operands beyond the fixed part of the node structure.
|
||||
Not used for types or decls. */
|
||||
|
||||
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
|
||||
|
||||
const unsigned char tree_code_length[] = {
|
||||
#include "tree.def"
|
||||
0,
|
||||
#include "c-common.def"
|
||||
0,
|
||||
#include "cp-tree.def"
|
||||
0,
|
||||
#include "objc-tree.def"
|
||||
};
|
||||
#undef DEFTREECODE
|
||||
|
||||
/* Names of tree components.
|
||||
Used for printing out the tree and error messages. */
|
||||
#define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
|
||||
|
||||
const char *const tree_code_name[] = {
|
||||
#include "tree.def"
|
||||
"@@dummy",
|
||||
#include "c-common.def"
|
||||
"@@dummy",
|
||||
#include "cp-tree.def"
|
||||
"@@dummy",
|
||||
#include "objc-tree.def"
|
||||
};
|
||||
#undef DEFTREECODE
|
||||
|
||||
/* Lang hook routines common to C++ and ObjC++ appear in cp/cp-objcp-common.c;
|
||||
there should be very few (if any) routines below. */
|
||||
|
||||
tree
|
||||
objcp_tsubst_copy_and_build (tree t, tree args, tsubst_flags_t complain,
|
||||
tree in_decl, bool function_p ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#define RECURSE(NODE) \
|
||||
tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
|
||||
|
||||
/* The following two can only occur in Objective-C++. */
|
||||
|
||||
switch ((int) TREE_CODE (t))
|
||||
{
|
||||
case MESSAGE_SEND_EXPR:
|
||||
return objc_finish_message_expr
|
||||
(RECURSE (TREE_OPERAND (t, 0)),
|
||||
TREE_OPERAND (t, 1), /* No need to expand the selector. */
|
||||
RECURSE (TREE_OPERAND (t, 2)));
|
||||
|
||||
case CLASS_REFERENCE_EXPR:
|
||||
return objc_get_class_reference
|
||||
(RECURSE (TREE_OPERAND (t, 0)));
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Fall back to C++ processing. */
|
||||
return NULL_TREE;
|
||||
|
||||
#undef RECURSE
|
||||
}
|
||||
|
||||
void
|
||||
finish_file (void)
|
||||
{
|
||||
objc_finish_file ();
|
||||
}
|
||||
|
||||
#include "gtype-objcp.h"
|
Loading…
Reference in New Issue
Block a user