aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaius Mulley <gaiusmod2@gmail.com>2024-04-25 15:19:30 +0100
committerGaius Mulley <gaiusmod2@gmail.com>2024-04-25 15:19:30 +0100
commit070dd5c883ec2c0be542f448bd82d0f7f0ead390 (patch)
treecfe0fa7b73588bb86b9dc1edf7b9b1f440300ad4
parent59ff81835fee22a9d4c9a481a4d1814583aae945 (diff)
downloadgcc-070dd5c883ec2c0be542f448bd82d0f7f0ead390.zip
gcc-070dd5c883ec2c0be542f448bd82d0f7f0ead390.tar.gz
gcc-070dd5c883ec2c0be542f448bd82d0f7f0ead390.tar.bz2
modula2: issue the parameter incompatibility error message based on dialect
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>
-rw-r--r--gcc/m2/gm2-compiler/M2FileName.def2
-rw-r--r--gcc/m2/gm2-compiler/M2Range.mod32
2 files changed, 28 insertions, 6 deletions
diff --git a/gcc/m2/gm2-compiler/M2FileName.def b/gcc/m2/gm2-compiler/M2FileName.def
index 0241359..01acb9b 100644
--- a/gcc/m2/gm2-compiler/M2FileName.def
+++ b/gcc/m2/gm2-compiler/M2FileName.def
@@ -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.
*)
diff --git a/gcc/m2/gm2-compiler/M2Range.mod b/gcc/m2/gm2-compiler/M2Range.mod
index 4b8e5fa..7686620 100644
--- a/gcc/m2/gm2-compiler/M2Range.mod
+++ b/gcc/m2/gm2-compiler/M2Range.mod
@@ -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