Commit 4e089a75 by Ziemowit Laski Committed by Ziemowit Laski

Make-lang.in: Update copyright.

        * objc/Make-lang.in: Update copyright.
        (OBJC_OBJS): Add objc-lang.o.
        (objc-lang.o): New rule.
        * objc/config-lang.in: Fix file description and update
        copyright.
        * objc/objc-act.c: Do not include langhooks.h and
        langhooks-def.h
        (lang_hooks): Move (along with LANG_HOOKS...) to objc-lang.c.
        (objc_post_options): Move to objc-lang.c.
        (objc_init_options): Move to objc-lang.c.
        (objc_init): Make non-static.
        (HASHFUNCTION): Remove macro.
        (hash_func): New function.
        (hash_enter): Replace HASHFUNCTION with hash_func.
        (hash_lookup): Replace HASHFUNCTION with hash_func.
        (maybe_objc_tree_codes): New function.
        (init_objc): Move ObjC tree code initialization to
        maybe_objc_tree_codes().
        * objc/objc-act.h (GCC_OBJC_ACT_H): New include guard.
        (objc_init): New public prototype.
        (objc_decode_option): New public prototype.
        (maybe_add_objc_tree_codes): New public prototype.
        * objc/objc-lang.c: New file.
        (lang_hooks): Moved from objc-act.c.
        (objc_post_options): Moved from objc-act.c.
        (objc_init_options): Moved from objc-act.c.

From-SVN: r47575
parent 9904592e
2001-12-02 Ziemowit Laski <zlaski@apple.com>
* objc/Make-lang.in: Update copyright.
(OBJC_OBJS): Add objc-lang.o.
(objc-lang.o): New rule.
* objc/config-lang.in: Fix file description and update
copyright.
* objc/objc-act.c: Do not include langhooks.h and
langhooks-def.h
(lang_hooks): Move (along with LANG_HOOKS...) to objc-lang.c.
(objc_post_options): Move to objc-lang.c.
(objc_init_options): Move to objc-lang.c.
(objc_init): Make non-static.
(objc_decode_option): Make non-static.
(HASHFUNCTION): Remove macro.
(hash_func): New function.
(hash_enter): Replace HASHFUNCTION with hash_func.
(hash_lookup): Replace HASHFUNCTION with hash_func.
(maybe_objc_tree_codes): New function.
(init_objc): Move ObjC tree code initialization to
maybe_objc_tree_codes().
* objc/objc-act.h (GCC_OBJC_ACT_H): New include guard.
(objc_init): New public prototype.
(objc_decode_option): New public prototype.
(maybe_add_objc_tree_codes): New public prototype.
* objc/objc-lang.c: New file.
(lang_hooks): Moved from objc-act.c.
(objc_post_options): Moved from objc-act.c.
(objc_init_options): Moved from objc-act.c.
2001-12-03 Geoff Keating <geoffk@redhat.com> 2001-12-03 Geoff Keating <geoffk@redhat.com>
* emit-rtl.c (gen_lowpart_common): Avoid unwanted sign-extension * emit-rtl.c (gen_lowpart_common): Avoid unwanted sign-extension
......
# Top level makefile fragment for GNU Objective-C # Top level makefile fragment for GNU Objective-C
# Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
#This file is part of GNU CC. #This file is part of GNU CC.
...@@ -48,13 +48,20 @@ OBJECTIVE-C objective-c: cc1obj$(exeext) ...@@ -48,13 +48,20 @@ OBJECTIVE-C objective-c: cc1obj$(exeext)
objc-warn = $(STRICT_WARN) objc-warn = $(STRICT_WARN)
# Language-specific object files for Objective C. # Language-specific object files for Objective C.
OBJC_OBJS = objc-parse.o objc-act.o $(C_AND_OBJC_OBJS) OBJC_OBJS = objc-lang.o objc-parse.o objc-act.o $(C_AND_OBJC_OBJS)
cc1obj$(exeext): $(OBJC_OBJS) $(BACKEND) $(LIBDEPS) cc1obj$(exeext): $(OBJC_OBJS) $(BACKEND) $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(OBJC_OBJS) $(BACKEND) $(LIBS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(OBJC_OBJS) $(BACKEND) $(LIBS)
# Objective C language specific files. # Objective C language specific files.
objc-lang.o : $(srcdir)/objc/objc-lang.c \
$(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(srcdir)/c-tree.h \
$(srcdir)/c-common.h $(srcdir)/toplev.h $(srcdir)/objc/objc-act.h \
$(srcdir)/langhooks.h $(srcdir)/langhooks-def.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
-c $(srcdir)/objc/objc-lang.c $(OUTPUT_OPTION)
objc-parse.o : $(srcdir)/objc/objc-parse.c \ objc-parse.o : $(srcdir)/objc/objc-parse.c \
$(CONFIG_H) $(TREE_H) $(srcdir)/toplev.h $(srcdir)/ggc.h \ $(CONFIG_H) $(TREE_H) $(srcdir)/toplev.h $(srcdir)/ggc.h \
$(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/c-common.h \ $(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/c-common.h \
......
# Top level configure fragment for the GNU Objective-C Runtime Library. # Top level configure fragment for GNU Objective-C
# Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. # Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
#This file is part of GNU CC. #This file is part of GNU CC.
......
...@@ -59,8 +59,6 @@ Boston, MA 02111-1307, USA. */ ...@@ -59,8 +59,6 @@ Boston, MA 02111-1307, USA. */
#include "debug.h" #include "debug.h"
#include "target.h" #include "target.h"
#include "varray.h" #include "varray.h"
#include "langhooks.h"
#include "langhooks-def.h"
/* This is the default way of generating a method name. */ /* This is the default way of generating a method name. */
/* I am not sure it is really correct. /* I am not sure it is really correct.
...@@ -157,10 +155,6 @@ char *util_firstobj; ...@@ -157,10 +155,6 @@ char *util_firstobj;
static void init_objc PARAMS ((void)); static void init_objc PARAMS ((void));
static void finish_objc PARAMS ((void)); static void finish_objc PARAMS ((void));
static const char *objc_init PARAMS ((const char *));
static void objc_init_options PARAMS ((void));
static int objc_decode_option PARAMS ((int, char **));
static void objc_post_options PARAMS ((void));
/* Code generation. */ /* Code generation. */
...@@ -214,6 +208,7 @@ static void objc_expand_function_end PARAMS ((void)); ...@@ -214,6 +208,7 @@ static void objc_expand_function_end PARAMS ((void));
hash *nst_method_hash_list = 0; hash *nst_method_hash_list = 0;
hash *cls_method_hash_list = 0; hash *cls_method_hash_list = 0;
static size_t hash_func PARAMS ((tree));
static void hash_init PARAMS ((void)); static void hash_init PARAMS ((void));
static void hash_enter PARAMS ((hash *, tree)); static void hash_enter PARAMS ((hash *, tree));
static hash hash_lookup PARAMS ((hash *, tree)); static hash hash_lookup PARAMS ((hash *, tree));
...@@ -276,6 +271,7 @@ static void dump_interface PARAMS ((FILE *, tree)); ...@@ -276,6 +271,7 @@ static void dump_interface PARAMS ((FILE *, tree));
/* Everything else. */ /* Everything else. */
static void add_objc_tree_codes PARAMS ((void));
static tree define_decl PARAMS ((tree, tree)); static tree define_decl PARAMS ((tree, tree));
static tree lookup_method_in_protocol_list PARAMS ((tree, tree, int)); static tree lookup_method_in_protocol_list PARAMS ((tree, tree, int));
static tree lookup_protocol_in_reflist PARAMS ((tree, tree)); static tree lookup_protocol_in_reflist PARAMS ((tree, tree));
...@@ -452,45 +448,8 @@ static int generating_instance_variables = 0; ...@@ -452,45 +448,8 @@ static int generating_instance_variables = 0;
static int print_struct_values = 0; static int print_struct_values = 0;
#undef LANG_HOOKS_NAME
#define LANG_HOOKS_NAME "GNU Objective-C"
#undef LANG_HOOKS_INIT
#define LANG_HOOKS_INIT objc_init
#undef LANG_HOOKS_FINISH
#define LANG_HOOKS_FINISH c_common_finish
#undef LANG_HOOKS_INIT_OPTIONS
#define LANG_HOOKS_INIT_OPTIONS objc_init_options
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION objc_decode_option
#undef LANG_HOOKS_POST_OPTIONS
#define LANG_HOOKS_POST_OPTIONS objc_post_options
#undef LANG_HOOKS_PRINT_IDENTIFIER
#define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier
#undef LANG_HOOKS_SET_YYDEBUG
#define LANG_HOOKS_SET_YYDEBUG c_set_yydebug
/* Inlining hooks same as the C front end. */
#undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN
#define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
c_cannot_inline_tree_fn
#undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS
#define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
c_disregard_inline_limits
#undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P
#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
anon_aggr_type_p
/* Each front end provides its own. */
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
static varray_type deferred_fns; static varray_type deferred_fns;
/* Post-switch processing. */
static void
objc_post_options ()
{
c_common_post_options ();
}
/* Some platforms pass small structures through registers versus through /* Some platforms pass small structures through registers versus through
an invisible pointer. Determine at what size structure is the an invisible pointer. Determine at what size structure is the
transition point between the two possibilities. */ transition point between the two possibilities. */
...@@ -554,17 +513,12 @@ generate_struct_by_value_array () ...@@ -554,17 +513,12 @@ generate_struct_by_value_array ()
exit (0); exit (0);
} }
static void const char *
objc_init_options ()
{
c_common_init_options (clk_objective_c);
}
static const char *
objc_init (filename) objc_init (filename)
const char *filename; const char *filename;
{ {
filename = c_objc_common_init (filename); filename = c_objc_common_init (filename);
add_objc_tree_codes ();
decl_printable_name = objc_printable_name; decl_printable_name = objc_printable_name;
...@@ -647,7 +601,7 @@ finish_file () ...@@ -647,7 +601,7 @@ finish_file ()
fclose (gen_declaration_file); fclose (gen_declaration_file);
} }
static int int
objc_decode_option (argc, argv) objc_decode_option (argc, argv)
int argc; int argc;
char **argv; char **argv;
...@@ -5314,9 +5268,22 @@ build_ivar_reference (id) ...@@ -5314,9 +5268,22 @@ build_ivar_reference (id)
return build_component_ref (build_indirect_ref (self_decl, "->"), id); return build_component_ref (build_indirect_ref (self_decl, "->"), id);
} }
/* Make the hash value positive. */
#define HASHFUNCTION(key) ((size_t) key & 0x7fffffff) /* Compute a hash value for a given method SEL_NAME. */
static size_t
hash_func (sel_name)
tree sel_name;
{
const unsigned char *s
= (const unsigned char *)IDENTIFIER_POINTER (sel_name);
size_t h = 0;
while (*s)
h = h * 67 + *s++ - 113;
return h;
}
static void static void
hash_init () hash_init ()
{ {
...@@ -5337,7 +5304,7 @@ hash_enter (hashlist, method) ...@@ -5337,7 +5304,7 @@ hash_enter (hashlist, method)
static hash hash_alloc_list = 0; static hash hash_alloc_list = 0;
static int hash_alloc_index = 0; static int hash_alloc_index = 0;
hash obj; hash obj;
int slot = HASHFUNCTION (METHOD_SEL_NAME (method)) % SIZEHASHTABLE; int slot = hash_func (METHOD_SEL_NAME (method)) % SIZEHASHTABLE;
if (! hash_alloc_list || hash_alloc_index >= HASH_ALLOC_LIST_SIZE) if (! hash_alloc_list || hash_alloc_index >= HASH_ALLOC_LIST_SIZE)
{ {
...@@ -5360,7 +5327,7 @@ hash_lookup (hashlist, sel_name) ...@@ -5360,7 +5327,7 @@ hash_lookup (hashlist, sel_name)
{ {
hash target; hash target;
target = hashlist[HASHFUNCTION (sel_name) % SIZEHASHTABLE]; target = hashlist[hash_func (sel_name) % SIZEHASHTABLE];
while (target) while (target)
{ {
...@@ -8074,23 +8041,27 @@ objc_printable_name (decl, kind) ...@@ -8074,23 +8041,27 @@ objc_printable_name (decl, kind)
return objc_demangle (IDENTIFIER_POINTER (DECL_NAME (decl))); return objc_demangle (IDENTIFIER_POINTER (DECL_NAME (decl)));
} }
/* Adds the tree codes specific to the ObjC/ObjC++ front end to the
list of all tree codes. */
static void static void
init_objc () add_objc_tree_codes ()
{ {
/* Add the special tree codes of Objective C to the tables. */ int add = (int) LAST_OBJC_TREE_CODE - (int) LAST_BASE_TREE_CODE;
gcc_obstack_init (&util_obstack);
util_firstobj = (char *) obstack_finish (&util_obstack);
memcpy (tree_code_type + (int) LAST_BASE_TREE_CODE, memcpy (tree_code_type + (int) LAST_BASE_TREE_CODE,
objc_tree_code_type, objc_tree_code_type, add);
(int) LAST_OBJC_TREE_CODE - (int) LAST_BASE_TREE_CODE);
memcpy (tree_code_length + (int) LAST_BASE_TREE_CODE, memcpy (tree_code_length + (int) LAST_BASE_TREE_CODE,
objc_tree_code_length, objc_tree_code_length, add * sizeof (int));
(((int) LAST_OBJC_TREE_CODE - (int) LAST_BASE_TREE_CODE) * sizeof (int)));
memcpy (tree_code_name + (int) LAST_BASE_TREE_CODE, memcpy (tree_code_name + (int) LAST_BASE_TREE_CODE,
objc_tree_code_name, objc_tree_code_name, add * sizeof (char *));
(((int) LAST_OBJC_TREE_CODE - (int) LAST_BASE_TREE_CODE) * sizeof (char *))); }
static void
init_objc ()
{
gcc_obstack_init (&util_obstack);
util_firstobj = (char *) obstack_finish (&util_obstack);
errbuf = (char *)xmalloc (BUFSIZE); errbuf = (char *)xmalloc (BUFSIZE);
hash_init (); hash_init ();
......
...@@ -18,9 +18,14 @@ along with GNU CC; see the file COPYING. If not, write to ...@@ -18,9 +18,14 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#ifndef GCC_OBJC_ACT_H
#define GCC_OBJC_ACT_H
/*** Public Interface (procedures) ***/ /*** Public Interface (procedures) ***/
const char *objc_init PARAMS ((const char *));
int objc_decode_option PARAMS ((int, char **));
/* used by yyparse */ /* used by yyparse */
void finish_file PARAMS ((void)); void finish_file PARAMS ((void));
...@@ -353,3 +358,4 @@ extern tree objc_global_trees[OCTI_MAX]; ...@@ -353,3 +358,4 @@ extern tree objc_global_trees[OCTI_MAX];
#define string_class_decl objc_global_trees[OCTI_STRING_CLASS_DECL] #define string_class_decl objc_global_trees[OCTI_STRING_CLASS_DECL]
#define UOBJC_SUPER_decl objc_global_trees[OCTI_SUPER_DECL] #define UOBJC_SUPER_decl objc_global_trees[OCTI_SUPER_DECL]
#endif /* GCC_OBJC_ACT_H */
/* Language-dependent hooks for Objective-C.
Copyright 2001 Free Software Foundation, Inc.
Contributed by Ziemowit Laski <zlaski@apple.com>
This file is part of GNU CC.
GNU CC 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.
GNU CC 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 GNU CC; 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 "tree.h"
#include "c-tree.h"
#include "c-common.h"
#include "toplev.h"
#include "objc-act.h"
#include "langhooks.h"
#include "langhooks-def.h"
static void objc_init_options PARAMS ((void));
static void objc_post_options PARAMS ((void));
#undef LANG_HOOKS_NAME
#define LANG_HOOKS_NAME "GNU Objective-C"
#undef LANG_HOOKS_INIT
#define LANG_HOOKS_INIT objc_init
#undef LANG_HOOKS_FINISH
#define LANG_HOOKS_FINISH c_common_finish
#undef LANG_HOOKS_INIT_OPTIONS
#define LANG_HOOKS_INIT_OPTIONS objc_init_options
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION objc_decode_option
#undef LANG_HOOKS_POST_OPTIONS
#define LANG_HOOKS_POST_OPTIONS objc_post_options
#undef LANG_HOOKS_PRINT_IDENTIFIER
#define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier
#undef LANG_HOOKS_SET_YYDEBUG
#define LANG_HOOKS_SET_YYDEBUG c_set_yydebug
/* Inlining hooks same as the C front end. */
#undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN
#define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
c_cannot_inline_tree_fn
#undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS
#define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
c_disregard_inline_limits
#undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P
#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
anon_aggr_type_p
/* Each front end provides its own hooks, for toplev.c. */
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
static void
objc_init_options ()
{
c_common_init_options (clk_objective_c);
}
/* Post-switch processing. */
static void
objc_post_options ()
{
c_common_post_options ();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment