Check more, when an error occurred
authorceriel <none@none>
Mon, 17 Nov 1986 13:08:18 +0000 (13:08 +0000)
committerceriel <none@none>
Mon, 17 Nov 1986 13:08:18 +0000 (13:08 +0000)
lang/m2/comp/chk_expr.c

index fb1dd19..7d27a38 100644 (file)
@@ -29,11 +29,11 @@ STATIC
 Xerror(nd, mess, edf)
        struct node *nd;
        char *mess;
-       struct def *edf;
+       register struct def *edf;
 {
        if (edf) {
                if (edf->df_kind != D_ERROR)  {
-                       node_error(nd, "\"%s\": %s", edf->df_idf->id_text, mess);
+                       node_error(nd,"\"%s\": %s", edf->df_idf->id_text, mess);
                }
        }
        else    node_error(nd, "%s", mess);
@@ -517,6 +517,16 @@ ChkProcCall(expp)
        if (left->nd_class == Def || left->nd_class == LinkDef) {
                edf = left->nd_def;
        }
+       if (left->nd_type == error_type) {
+               /* Just check parameters as if they were value parameters
+               */
+               expp->nd_type = error_type;
+               while (expp->nd_right) {
+                       getarg(&expp, 0, 0, edf);
+               }
+               return 0;
+       }
+
        expp->nd_type = RemoveEqual(ResultType(left->nd_type));
 
        /* Check parameter list
@@ -564,31 +574,30 @@ ChkCall(expp)
        */
        expp->nd_type = error_type;
        left = expp->nd_left;
-       if (! ChkDesignator(left)) return 0;
-
-       if (IsCast(left)) {
-               /* It was a type cast.
-               */
-               return ChkCast(expp, left);
-       }
+       if (ChkDesignator(left)) {
+               if (IsCast(left)) {
+                       /* It was a type cast.
+                       */
+                       return ChkCast(expp, left);
+               }
 
-       if (IsProcCall(left)) {
-               /* A procedure call.
-                  It may also be a call to a standard procedure
-               */
-               if (left->nd_type == std_type) {
-                       /* A standard procedure
+               if (IsProcCall(left)) {
+                       /* A procedure call.
+                          It may also be a call to a standard procedure
+                       */
+                       if (left->nd_type == std_type) {
+                               /* A standard procedure
+                               */
+                               return ChkStandard(expp, left);
+                       }
+                       /* Here, we have found a real procedure call. 
+                          The left hand side may also represent a procedure
+                          variable.
                        */
-                       return ChkStandard(expp, left);
                }
-               /* Here, we have found a real procedure call. The left hand
-                  side may also represent a procedure variable.
-               */
-               return ChkProcCall(expp);
+               else node_error(left, "procedure, type, or function expected");
        }
-
-       node_error(left, "procedure, type, or function expected");
-       return 0;
+       return ChkProcCall(expp);
 }
 
 STATIC struct type *