*** empty log message ***

From-SVN: r4192
This commit is contained in:
Tom Wood 1993-04-22 11:48:29 +00:00
parent a0825a7f0c
commit 392202b07d
2 changed files with 26 additions and 33 deletions

View File

@ -461,7 +461,8 @@ comptypes (type1, type2)
}
case RECORD_TYPE:
return maybe_objc_comptypes (t1, t2, 0);
if (maybe_objc_comptypes (t1, t2, 0) == 1)
return 1;
}
return 0;
}
@ -473,29 +474,14 @@ static int
comp_target_types (ttl, ttr)
tree ttl, ttr;
{
int val = 0;
int val;
if (doing_objc_thang)
{
/* Give maybe_objc_comptypes a crack at letting these types through. */
val = maybe_objc_comptypes (ttl, ttr, 1);
/* Give maybe_objc_comptypes a crack at letting these types through. */
if (val = maybe_objc_comptypes (ttl, ttr, 1) >= 0)
return val;
if (val != 1 && !pedantic)
{
/* Ignore pointer qualifiers recursively. This way char **
and const char ** are compatible. */
if (TREE_CODE (ttl) == POINTER_TYPE
&& TREE_CODE (ttr) == POINTER_TYPE)
return comp_target_types (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
else
return comptypes (ttl, ttr);
}
}
if (val != 1)
val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
if (val == 2 && pedantic)
pedwarn ("types are not quite compatible");

View File

@ -577,15 +577,17 @@ define_decl (declarator, declspecs)
return decl;
}
/* Rules for statically typed objects. Called from comptypes,
convert_for_assignment, and comp_target_types.
/* Return 1 if LHS and RHS are compatible types for assignment or
various other operations. Return 0 if they are incompatible, and
return -1 if we choose to not decide. When the operation is
REFLEXIVE, check for compatibility in either direction.
An assignment of the form `a' = `b' is permitted if:
For statically typed objects, an assignment of the form `a' = `b'
is permitted if:
- `a' is of type "id".
- `a' and `b' are the same class type.
- `a' and `b' are of class types A and B such that B is a descendant
of A. */
`a' is of type "id",
`a' and `b' are the same class type, or
`a' and `b' are of class types A and B such that B is a descendant of A. */
int
maybe_objc_comptypes (lhs, rhs, reflexive)
@ -594,7 +596,7 @@ maybe_objc_comptypes (lhs, rhs, reflexive)
{
if (doing_objc_thang)
return objc_comptypes (lhs, rhs, reflexive);
return 0;
return -1;
}
static tree
@ -662,6 +664,11 @@ lookup_protocol_in_reflist (rproto_list, lproto)
return 0;
}
/* Return 1 if LHS and RHS are compatible types for assignment
or various other operations. Return 0 if they are incompatible,
and return -1 if we choose to not decide. When the operation
is REFLEXIVE, check for compatibility in either direction. */
int
objc_comptypes (lhs, rhs, reflexive)
tree lhs;
@ -752,12 +759,12 @@ objc_comptypes (lhs, rhs, reflexive)
return 1; /* one of the types is a protocol */
}
else
return 2; /* defer to comptypes */
return -1; /* defer to comptypes */
}
else if (TREE_CODE (lhs) == RECORD_TYPE && TREE_CODE (rhs) == RECORD_TYPE)
; /* fall thru...this is the case we have been handling all along */
else
return 2; /* defer to comptypes */
return -1; /* defer to comptypes */
/* End of new protocol support. */
@ -803,7 +810,7 @@ objc_comptypes (lhs, rhs, reflexive)
return 0;
}
else
return 0;
return -1; /* defer to comptypes */
}
/* Called from c-decl.c before all calls to rest_of_decl_compilation. */