• jason's avatar
    * class.c (grow_method): Remove check for redeclaration. · 64b4f183
    jason authored
    Fri Sep  5 01:37:17 1997  Mark Mitchell  <mmitchell@usa.net>
    
    	* cp-tree.h (INNERMOST_TEMPLATE_PARMS): New macro.
    	(DECL_INNERMOST_TEMPLATE_PARMS): Likewise.
    	(PRIMARY_TEMPLATE_P): Use it.
    	* call.c (build_overload_call_real): Use it.
    	* class.c (instantiate_type): Likewise.
    	* decl.c (decls_match): Likewise.
    	* method.c (build_overload_identifier): Likewise.
    	* pt.c (push_template_decl): Likewise.
    	(classtype_mangled_name): Likewise.
    	(lookup_template_class): Likewise.
    
    	* cp-tree.h (DECL_NTPARMS): Change name from DECL_NT_PARMS to
    	DECL_NTPARMS to conform to usage elsewhere.
    	* call.c (add_template_candidate): Likewise.
    	* class.c (instantiate_type): Likewise.
    	* pt.c (instantiate_template): Likewise.
    	(get_bindings): Likewise.
    
    	* class.c (grow_method): Use DECL_FUNCTION_TEMPLATE_P instead of
    	is_member_template.
    
    	* pt.c (unify): Undo changes to allow multiple levels of template
    	parameters.
    	(type_unification): Likewise.
    	(fn_type_unification): Likewise.
    	(get_class_bindings): Likewise.
    	* cp-tree.h (Likewise).
    
    	* decl.c (replace_defarg): Check that the type of the default
    	parameter does not invlove a template type before complaining
    	about the initialization.
    
    	* error.c (dump_expr): Deal with template constant parameters in
    	member templates correctly.
    
    	* pt.c (is_member_template): Deal with class specializations
    	correctly.
    	(tsubst): Handle "partial instantiation" of member templates
    	correctly.
    
    Wed Sep  3 12:30:24 1997  Mark Mitchell  <mmitchell@usa.net>
    
    	* pt.c (type_unification): Change calling squence to allow for
    	multiple levels of template parameters.
    	(tsubst_expr): Likewise.
    	(tsubst): Likewise.
    	(tsubst_copy): Likewise.
    	(instantiate_template): Likewise.
    	(unify): Likewise.
    	* call.c (build_overload_call_real): Use it.
    	(add_builtin_candidate): Use it.
    	(build_new_method_call): Use it.
    	* class.c (instantiate_type): Use it.
    	* decl.c (grokdeclarator): Use it.
    	* decl2.c (finish_file): Use it.
    	* method.c (build_overload_identifier): Use it.
    
    	* call.c (add_template_candidate):  Add additional parameter for
    	the function return type.  Call fn_type_unification istead of
    	type_unification.
    	(build_user_type_conversion_1): Handle member templates.
    	(build_new_function_call): Likewise.
    	(build_new_op): Likewise.
    	(build_new_method_call): Likewise.
    
    	* class.c (grow_method): Don't give an error message indicating
     	that two member templates with the same name are ambiguous.
    	(finish_struct): Treat member template functions just like member
     	functions.
    
    	* cp-tree.h (check_member_template): Add declaration.
    	(begin_member_template_processing): Likewise.
    	(end_member_template_processing): Likewise.
    	(fn_type_unification): Likewise.
    	(is_member_template): Likewise.
    	(tsubst): Change prototype.
    	(tsubst_expr): Likewise.
    	(tsubst_copy): Likewise.
    	(instantiate_template): Likewise.
    	(get_bindings): Likewise.
    
    	* decl.c (decls_match): Handle multiple levels of template
    	parameters.
    	(pushdecl): Handle template type params just like other type
    	declarations.
    	(push_class_level_binding): Return immediately if the
    	class_binding_level is NULL.
    	(grokfndecl): If check_classfn() returns a member_template, use
    	the result of the template, not the template itself.
    
    	* decl2.c (check_member_template): New function.  Check to see
    	that the entity declared to be a member template can be one.
    	(check_classfn): Allow redeclaration of member template functions
    	with different types; the new functions can be specializations or
    	explicit instantiations.
    
    	* error.c (dump_decl): Handle multiple levels of template
    	parameters.
    	(dump_function_decl): Update to handle function	templates.
    
    	* lex.c (do_pending_inlines): Set up template parameter context
    	for member templates.
    	(process_next_inline): Likewise.
    
    	* method. (build_overload_identifier): Adjust for multiple levels
    	of template parameters.
    
    	* parse.y (fn.def2): Add member templates.
    	(component_decl_1): Likewise.
    
    	* pt.c (begin_member_template_processing): New function.
    	(end_member_template_processing): Likewise.
    	(is_member_template): Likewise.
    	(fn_type_unification): Likewise.
    	(current_template_parms): Return a vector of all the template
    	parms, not just the innermost level of parms.
    	(push_template_decl): Deal with the possibility of member
    	templates.
    	(lookup_template_class): Likewise.
    	(uses_template_parms): Likewise.
    	(tsubst): Modify processing to TEMPLATE_TYPE_PARM and
    	TEMPLATE_CONST_PARM to deal with multiple levels of template
    	arguments.   Add processing of TEMPLATE_DECL to produce new
    	TEMPLATE_DECLs from old ones.
    	(do_decl_instantiation): Handle member templates.
    
    	* search.c (lookup_fnfields_1): Handle member template conversion
    	operators.
    
    	* tree.c (cp_tree_equal): Check the levels, as well as the
    	indices, of TEMPLATE_CONST_PARMs.
    
    	* typeck.c (comptypes): Check the levels, as well as the indices,
    	fo TEMPLATE_TYPE_PARMs.
    	(build_x_function_call): Treat member templates like member
    	functions.
    
    Member templates.
    
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15130 138bc75d-0d04-0410-961f-82ee72b054a4
    64b4f183
pt.c 104 KB