]> git.sur5r.net Git - cc65/commitdiff
New function PtrConversion
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 2 Aug 2004 16:37:00 +0000 (16:37 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 2 Aug 2004 16:37:00 +0000 (16:37 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3168 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/datatype.c
src/cc65/datatype.h
src/cc65/typeconv.c

index 979e3e13870ab33aacf3046a953b80778502b44f..f4a30a8e66eeb081e320e75b84c70a0ca57c9e2f 100644 (file)
@@ -797,3 +797,20 @@ type* IntPromotion (type* T)
 
 
 
+type* PtrConversion (type* T)
+/* If the type is a function, convert it to pointer to function. If the
+ * expression is an array, convert it to pointer to first element. Otherwise
+ * return T.
+ */                          
+{
+    if (IsTypeFunc (T)) {
+               return PointerTo (T);
+    } else if (IsTypeArray (T)) {
+        return ArrayToPtr (T);
+    } else {
+        return T;
+    }
+}
+
+
+
index cf78490428c15a5c4f451cadf0dfa810c85be95c..284506aa8acabc3a37334c64fba8f47ea19dc39e 100644 (file)
@@ -496,6 +496,12 @@ type* IntPromotion (type* T);
  * string may be T if there is no need to change it.
  */
 
+type* PtrConversion (type* T);
+/* If the type is a function, convert it to pointer to function. If the
+ * expression is an array, convert it to pointer to first element. Otherwise
+ * return T.
+ */
+
 
 
 /* End of datatype.h */
index cf3c9a3ef4bbb1b8f7a21bc6bd5c47384f8c56f8..f93d34023586ea9e9c2072a7d4585ce1d4861dc4 100644 (file)
 
 
 
-static void DoPtrConversions (ExprDesc* Expr)
-/* If the expression is a function, convert it to pointer to function.
- * If the expression is an array, convert it to pointer to first element.
- */
-{
-    if (IsTypeFunc (Expr->Type)) {
-       Expr->Type = PointerTo (Expr->Type);
-    } else if (IsTypeArray (Expr->Type)) {
-        Expr->Type = ArrayToPtr (Expr->Type);
-    }
-}
-
-
-
 static void DoConversion (ExprDesc* Expr, const type* NewType)
 /* Emit code to convert the given expression to a new type. */
 {
@@ -185,7 +171,7 @@ void TypeConversion (ExprDesc* Expr, type* NewType)
     /* Get the type of the right hand side. Treat function types as
      * pointer-to-function
      */
-    DoPtrConversions (Expr);
+    Expr->Type = PtrConversion (Expr->Type);
 
     /* First, do some type checking */
     if (IsTypeVoid (NewType) || IsTypeVoid (Expr->Type)) {
@@ -293,7 +279,7 @@ void TypeCast (ExprDesc* Expr)
     hie10 (Expr);
 
     /* Convert functions and arrays to "pointer to" object */
-    DoPtrConversions (Expr);
+    Expr->Type = PtrConversion (Expr->Type);
 
     /* Convert the value. */
     DoConversion (Expr, NewType);