mirror of
https://github.com/cc65/cc65.git
synced 2025-02-11 15:30:52 +00:00
Fixed an error: If an expression is loaded into the primary, a function must
be converted to pointer-to-function and an array to pointer-to-member resp. git-svn-id: svn://svn.cc65.org/cc65/trunk@3977 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
dff0e86458
commit
32348f5778
@ -548,14 +548,11 @@ Type* Indirect (Type* T)
|
||||
|
||||
|
||||
|
||||
Type* ArrayToPtr (const Type* T)
|
||||
Type* ArrayToPtr (Type* T)
|
||||
/* Convert an array to a pointer to it's first element */
|
||||
{
|
||||
/* Function must only be called for an array */
|
||||
CHECK (IsTypeArray (T));
|
||||
|
||||
/* Return pointer to first element */
|
||||
return PointerTo (T + 1);
|
||||
return PointerTo (GetElementType (T));
|
||||
}
|
||||
|
||||
|
||||
@ -703,8 +700,10 @@ Type* PtrConversion (Type* T)
|
||||
* return T.
|
||||
*/
|
||||
{
|
||||
if (IsTypeFunc (T) || IsTypeArray (T)) {
|
||||
if (IsTypeFunc (T)) {
|
||||
return PointerTo (T);
|
||||
} else if (IsTypeArray (T)) {
|
||||
return ArrayToPtr (T);
|
||||
} else {
|
||||
return T;
|
||||
}
|
||||
|
@ -288,7 +288,7 @@ Type* Indirect (Type* T);
|
||||
* given type points to.
|
||||
*/
|
||||
|
||||
Type* ArrayToPtr (const Type* T);
|
||||
Type* ArrayToPtr (Type* T);
|
||||
/* Convert an array to a pointer to it's first element */
|
||||
|
||||
#if defined(HAVE_INLINE)
|
||||
@ -467,7 +467,7 @@ INLINE int IsClassStruct (const Type* T)
|
||||
{
|
||||
return (GetClass (T) == T_CLASS_STRUCT);
|
||||
}
|
||||
#else
|
||||
#else
|
||||
# define IsClassStruct(T) (GetClass (T) == T_CLASS_STRUCT)
|
||||
#endif
|
||||
|
||||
|
@ -171,6 +171,11 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr)
|
||||
ED_TestDone (Expr);
|
||||
}
|
||||
}
|
||||
|
||||
/* Do standard pointer conversions since the expression is now in the
|
||||
* primary.
|
||||
*/
|
||||
Expr->Type = PtrConversion (Expr->Type);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user