diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2024-12-07 14:04:44 +0000 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2024-12-07 14:04:44 +0000 |
commit | 41800372146f5ad15a8796b37f54965f78cc14fb (patch) | |
tree | 29c44fb06d48cb6acec18c662a23a393266f8857 /gcc | |
parent | 4abcf4ad38a4081f02ed09aed7892a3a6af61cbb (diff) | |
download | gcc-41800372146f5ad15a8796b37f54965f78cc14fb.zip gcc-41800372146f5ad15a8796b37f54965f78cc14fb.tar.gz gcc-41800372146f5ad15a8796b37f54965f78cc14fb.tar.bz2 |
PR modula2/117948: Forward procedure declaration should only be available in ISO
This patch restricts the forward procedure declaration to the ISO dialect.
gcc/m2/ChangeLog:
PR modula2/117948
* gm2-compiler/P1Build.bnf (ForwardDeclaration): Pass token
position of the FORWARD keyword to EndBuildForward.
* gm2-compiler/P1SymBuild.def (EndBuildForward): New parameter
forwardPos.
* gm2-compiler/P1SymBuild.mod (EndBuildForward): Issue an error at
forwardPos if the Iso boolean is false.
gcc/testsuite/ChangeLog:
PR modula2/117948
* gm2/pim/fail/forward.mod: New test.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/m2/gm2-compiler/P1Build.bnf | 2 | ||||
-rw-r--r-- | gcc/m2/gm2-compiler/P1SymBuild.def | 2 | ||||
-rw-r--r-- | gcc/m2/gm2-compiler/P1SymBuild.mod | 12 | ||||
-rw-r--r-- | gcc/testsuite/gm2/pim/fail/forward.mod | 14 |
4 files changed, 26 insertions, 4 deletions
diff --git a/gcc/m2/gm2-compiler/P1Build.bnf b/gcc/m2/gm2-compiler/P1Build.bnf index 42d034d..22476ca 100644 --- a/gcc/m2/gm2-compiler/P1Build.bnf +++ b/gcc/m2/gm2-compiler/P1Build.bnf @@ -878,7 +878,7 @@ ProcedureDeclaration := % VAR PostProcedureHeading := ProperProcedure | ForwardDeclaration =: -ForwardDeclaration := "FORWARD" % EndBuildForward % +ForwardDeclaration := "FORWARD" % EndBuildForward (GetTokenNo ()-1) % =: ProperProcedure := ProcedureBlock % PushAutoOn % diff --git a/gcc/m2/gm2-compiler/P1SymBuild.def b/gcc/m2/gm2-compiler/P1SymBuild.def index 89ed3ad..4786605 100644 --- a/gcc/m2/gm2-compiler/P1SymBuild.def +++ b/gcc/m2/gm2-compiler/P1SymBuild.def @@ -489,7 +489,7 @@ PROCEDURE BuildProcedureHeading ; Empty *) -PROCEDURE EndBuildForward ; +PROCEDURE EndBuildForward (forwardPos: CARDINAL) ; (* diff --git a/gcc/m2/gm2-compiler/P1SymBuild.mod b/gcc/m2/gm2-compiler/P1SymBuild.mod index 8a2ed87..cd42417 100644 --- a/gcc/m2/gm2-compiler/P1SymBuild.mod +++ b/gcc/m2/gm2-compiler/P1SymBuild.mod @@ -26,7 +26,10 @@ FROM ASCII IMPORT nul ; FROM NameKey IMPORT Name, WriteKey, MakeKey, KeyToCharStar, NulName ; FROM M2Debug IMPORT Assert, WriteDebug ; FROM M2LexBuf IMPORT GetFileName, GetTokenNo, UnknownTokenNo ; -FROM M2MetaError IMPORT MetaErrorString2, MetaError0, MetaError1, MetaError2, MetaErrorT1, MetaErrorT2 ; + +FROM M2MetaError IMPORT MetaErrorString2, MetaError0, MetaError1, + MetaError2, MetaErrorT0, MetaErrorT1, MetaErrorT2 ; + FROM DynamicStrings IMPORT String, Slice, InitString, KillString, EqualCharStar, RIndex, Mark, ConCat ; FROM M2Printf IMPORT printf0, printf1, printf2 ; FROM M2Options IMPORT Iso ; @@ -1064,13 +1067,18 @@ END EndBuildProcedure ; Empty *) -PROCEDURE EndBuildForward ; +PROCEDURE EndBuildForward (forwardPos: CARDINAL) ; VAR ProcSym: CARDINAL ; tok : CARDINAL ; BEGIN ProcSym := OperandT (1) ; tok := OperandTok (1) ; + IF NOT Iso + THEN + MetaErrorT0 (forwardPos, + 'forward declaration is only allowed in the ISO dialect of Modula-2') + END ; IF GetProcedureDefined (ProcSym, ForwardProcedure) THEN MetaErrorT1 (GetProcedureDeclaredTok (ProcSym, ForwardProcedure), diff --git a/gcc/testsuite/gm2/pim/fail/forward.mod b/gcc/testsuite/gm2/pim/fail/forward.mod new file mode 100644 index 0000000..123e006 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/forward.mod @@ -0,0 +1,14 @@ +MODULE forward ; + + +PROCEDURE foo (a: CARDINAL) ; FORWARD ; + +PROCEDURE foo (a: CARDINAL) ; +BEGIN + +END foo ; + + +BEGIN + foo (1) +END forward. |