]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
modula2: issue the parameter incompatibility error message based on dialect
authorGaius Mulley <gaiusmod2@gmail.com>
Thu, 25 Apr 2024 14:19:30 +0000 (15:19 +0100)
committerGaius Mulley <gaiusmod2@gmail.com>
Thu, 25 Apr 2024 14:19:30 +0000 (15:19 +0100)
This tiny patch improves the parameter incompatibility error message by
having a different message for the dialect chosen mentioning the specific
violation.  PIM uses assignment rules for pass by value and expression
rules for pass by reference.  ISO uses expression type checking for
pass by value and pass by reference.

gcc/m2/ChangeLog:

* gm2-compiler/M2FileName.def (CalculateFileName): Remove
quoted string in comment.
* gm2-compiler/M2Range.mod (FoldTypeParam): Generate dialect
specific parameter incompatibility error message.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
gcc/m2/gm2-compiler/M2FileName.def
gcc/m2/gm2-compiler/M2Range.mod

index 02413593003f0a3b9703df6fe1fb6a52445ea551..01acb9b48d52d2350c0297298fb909075fc0b94d 100644 (file)
@@ -39,7 +39,7 @@ EXPORT QUALIFIED CalculateFileName, CalculateStemName, ExtractExtension ;
                        given a module and an extension. This file name
                        length will be operating system specific.
                        String, Extension, is concatenated onto
-                       Module and thus it is safe to `Mark' the extension
+                       Module and thus it is safe to Mark the extension
                        for garbage collection.
 *)
 
index 4b8e5fadfe7715f9733d40f47ec92f5de226c8e7..7686620a2475a4928e3f5b880392a402822d9c30 100644 (file)
@@ -56,7 +56,7 @@ FROM M2Debug IMPORT Assert ;
 FROM Indexing IMPORT Index, InitIndex, InBounds, PutIndice, GetIndice ;
 FROM Storage IMPORT ALLOCATE ;
 FROM M2ALU IMPORT PushIntegerTree, PushInt, ConvertToInt, Equ, Gre, Less, GreEqu ;
-FROM M2Options IMPORT VariantValueChecking, CaseEnumChecking ;
+FROM M2Options IMPORT VariantValueChecking, CaseEnumChecking, GetPIM ;
 
 FROM M2Error IMPORT Error, InternalError, ErrorFormat0, ErrorFormat1, ErrorFormat2, FlushErrors,
                     GetAnnounceScope ;
@@ -1693,14 +1693,36 @@ END FoldTypeAssign ;
 
 
 (*
-   FoldTypeParam -
+   FoldTypeParam - performs a parameter check between actual and formal.
+                   The quad is removed if the check succeeds.
 *)
 
 PROCEDURE FoldTypeParam (q: CARDINAL; tokenNo: CARDINAL; formal, actual, procedure: CARDINAL; paramNo: CARDINAL) ;
+VAR
+   compatible: BOOLEAN ;
 BEGIN
-   IF ParameterTypeCompatible (tokenNo,
-                               '{%4EN} parameter type failure between actual parameter type {%3ad} and the formal type {%2ad}',
-                               procedure, formal, actual, paramNo, IsVarParam (procedure, paramNo))
+   compatible := FALSE ;
+   IF IsVarParam (procedure, paramNo)
+   THEN
+      (* Expression type compatibility rules for pass by reference parameters.  *)
+      compatible := ParameterTypeCompatible (tokenNo,
+                                             '{%4EN} parameter failure due to expression incompatibility ' +
+                                             'between actual parameter {%3ad} and the {%4N} formal {%2ad} parameter in procedure {%1ad}',
+                                             procedure, formal, actual, paramNo, TRUE)
+   ELSIF GetPIM ()
+   THEN
+      (* Assignment type compatibility rules for pass by value PIM parameters.  *)
+      compatible := ParameterTypeCompatible (tokenNo,
+                                             '{%4EN} parameter failure due to assignment incompatibility ' +
+                                             'between actual parameter {%3ad} and the {%4N} formal {%2ad} parameter in procedure {%1ad}',
+                                             procedure, formal, actual, paramNo, FALSE)
+   ELSE
+      compatible := ParameterTypeCompatible (tokenNo,
+                                             '{%4EN} parameter failure due to parameter incompatibility ' +
+                                             'between actual parameter {%3ad} and the {%4N} formal {%2ad} parameter in procedure {%1ad}',
+                                             procedure, formal, actual, paramNo, FALSE)
+   END ;
+   IF compatible
    THEN
       SubQuad(q)
    END