ELSE
resulttok := functok ;
MetaErrorT1 (resulttok,
- '{%E}SYSTEM procedure {%kSIZE} expects a variable as its parameter, seen {%1Ed}',
+ '{%E}SYSTEM procedure {%kSIZE} expects a variable or type as its parameter, seen {%1Ed}',
OperandT (1)) ;
ReturnVar := MakeConstLit (resulttok, MakeKey('0'), Cardinal)
END ;
GenQuadO (resulttok, SizeOp, ReturnVar, NulSym, GetSType (OperandT (1)), FALSE)
ELSE
MetaErrorT1 (resulttok,
- '{%E}SYSTEM procedure function {%kTSIZE} expects a variable as its first parameter, seen {%1Ed}',
+ '{%E}SYSTEM procedure function {%kTSIZE} expects a variable or type as its first parameter, seen {%1Ed}',
OperandT (1)) ;
ReturnVar := MakeConstLit (resulttok, MakeKey ('0'), Cardinal)
END
ImplementationOrProgramModule ) % PopAuto %
=:
-ProgramModule := % VAR modulet, endt: CARDINAL ; %
+ProgramModule := % VAR modulet, endt, namet: CARDINAL ; %
% modulet := GetTokenNo () %
"MODULE" % M2Error.DefaultProgramModule %
% PushAutoOn %
{ Import }
Block % PushAutoOn %
% endt := GetTokenNo () -1 %
+ % namet := GetTokenNo () %
Ident % EndBuildFile (endt) %
- % P3EndBuildProgModule %
+ % P3EndBuildProgModule (namet) %
"." % PopAuto ; PopAuto %
=:
-ImplementationModule := % VAR modulet, endt: CARDINAL ; %
+ImplementationModule := % VAR modulet, endt, namet: CARDINAL ; %
% modulet := GetTokenNo () %
"IMPLEMENTATION" % M2Error.DefaultImplementationModule %
"MODULE" % PushAutoOn %
{ Import }
Block % PushAutoOn %
% endt := GetTokenNo () -1 %
+ % namet := GetTokenNo () %
Ident % EndBuildFile (endt) %
- % P3EndBuildImpModule %
+ % P3EndBuildImpModule (namet) %
"." % PopAuto ; PopAuto ; PopAuto %
=:
FormalType := { "ARRAY" "OF" } QualidentCheck =:
-ModuleDeclaration := % VAR modulet: CARDINAL ; %
+ModuleDeclaration := % VAR modulet, namet: CARDINAL ; %
% modulet := GetTokenNo () %
"MODULE" % M2Error.DefaultInnerModule %
% PushAutoOn %
[ Priority ] ";"
{ Import } [ Export ]
Block % PushAutoOn %
- Ident % EndBuildInnerModule %
+ % namet := GetTokenNo () %
+ Ident % EndBuildInnerModule (namet) %
% PopAuto ; PopAuto ; PopAuto %
=:
Import := FromImport | WithoutFromImport =:
-DefinitionModule := % VAR deft, endt: CARDINAL ; %
+DefinitionModule := % VAR deft, endt, namet: CARDINAL ; %
% deft := GetTokenNo () %
"DEFINITION" % M2Error.DefaultDefinitionModule %
"MODULE" % PushAutoOn %
]
{ Definition } % endt := GetTokenNo () %
"END" % PushAutoOn %
+ % namet := GetTokenNo () %
Ident % EndBuildFile (endt) ;
- P3EndBuildDefModule %
+ P3EndBuildDefModule (namet) %
"." % PopAuto ; PopAuto ; PopAuto %
=:
|------------| |-----------|
*)
-PROCEDURE P3EndBuildDefModule ;
+PROCEDURE P3EndBuildDefModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE P3EndBuildImpModule ;
+PROCEDURE P3EndBuildImpModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE P3EndBuildProgModule ;
+PROCEDURE P3EndBuildProgModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE EndBuildInnerModule ;
+PROCEDURE EndBuildInnerModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE P3EndBuildDefModule ;
+PROCEDURE P3EndBuildDefModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : CARDINAL ;
BEGIN
Assert(CompilingDefinitionModule()) ;
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
M2StackSpell.Pop ;
PopT(NameEnd) ;
|------------| |-----------|
*)
-PROCEDURE P3EndBuildImpModule ;
+PROCEDURE P3EndBuildImpModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : Name ;
BEGIN
Assert(CompilingImplementationModule()) ;
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
M2StackSpell.Pop ;
PopT(NameEnd) ;
|------------| |-----------|
*)
-PROCEDURE P3EndBuildProgModule ;
+PROCEDURE P3EndBuildProgModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : Name ;
BEGIN
Assert(CompilingProgramModule()) ;
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
PopT(NameEnd) ;
PopT(NameStart) ;
|------------| |-----------|
*)
-PROCEDURE EndBuildInnerModule ;
+PROCEDURE EndBuildInnerModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : Name ;
BEGIN
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
PopT(NameEnd) ;
PopT(NameStart) ;
ImplementationOrProgramModule ) % PopAuto %
=:
-ProgramModule := "MODULE" % M2Error.DefaultProgramModule %
+ProgramModule := "MODULE" % VAR namet: CARDINAL ; %
+ % M2Error.DefaultProgramModule %
% PushAutoOn %
Ident % PCStartBuildProgModule %
% PushAutoOff %
{ Import % PCBuildImportOuterModule %
}
Block % PushAutoOn %
- Ident % PCEndBuildProgModule %
+ % namet := GetTokenNo () %
+ Ident % PCEndBuildProgModule (namet) %
"." % PopAuto ; PopAuto %
=:
-ImplementationModule := "IMPLEMENTATION" % M2Error.DefaultImplementationModule %
+ImplementationModule := "IMPLEMENTATION" % VAR namet: CARDINAL ; %
+ % M2Error.DefaultImplementationModule %
"MODULE" % PushAutoOn %
Ident % PCStartBuildImpModule %
% PushAutoOff %
{ Import % PCBuildImportOuterModule %
}
Block % PushAutoOn %
-
- Ident % PCEndBuildImpModule %
+ % namet := GetTokenNo () %
+ Ident % PCEndBuildImpModule (namet) %
"." % PopAuto ; PopAuto ; PopAuto %
=:
FormalType := { "ARRAY" "OF" } Qualident =:
-ModuleDeclaration := "MODULE" % M2Error.DefaultInnerModule %
+ModuleDeclaration := "MODULE" % VAR namet: CARDINAL ; %
+ % M2Error.DefaultInnerModule %
% PushAutoOn %
Ident % PCStartBuildInnerModule %
% PushAutoOff %
} [ Export
]
Block % PushAutoOn %
- Ident % PCEndBuildInnerModule %
+ % namet := GetTokenNo () %
+ Ident % PCEndBuildInnerModule (namet) %
% PopAuto ; PopAuto ; PopAuto %
=:
IdentList ";" ) % PopAuto %
=:
-DefinitionModule := "DEFINITION" % M2Error.DefaultDefinitionModule %
+DefinitionModule := "DEFINITION" % VAR namet: CARDINAL ; %
+ % M2Error.DefaultDefinitionModule %
"MODULE" % PushAutoOn %
[ "FOR" string ]
Ident % PCStartBuildDefModule ;
]
{ Definition }
"END" % PushAutoOn %
- Ident % PCEndBuildDefModule %
+ % namet := GetTokenNo () %
+ Ident % PCEndBuildDefModule (namet) %
"." % PopAuto ; PopAuto ; PopAuto %
=:
|------------| |-----------|
*)
-PROCEDURE PCEndBuildDefModule ;
+PROCEDURE PCEndBuildDefModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE PCEndBuildImpModule ;
+PROCEDURE PCEndBuildImpModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE PCEndBuildProgModule ;
+PROCEDURE PCEndBuildProgModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE PCEndBuildInnerModule ;
+PROCEDURE PCEndBuildInnerModule (tokno: CARDINAL) ;
(*
|------------| |-----------|
*)
-PROCEDURE PCEndBuildDefModule ;
+PROCEDURE PCEndBuildDefModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : CARDINAL ;
BEGIN
Assert(CompilingDefinitionModule()) ;
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
PopT(NameEnd) ;
PopT(NameStart) ;
|------------| |-----------|
*)
-PROCEDURE PCEndBuildImpModule ;
+PROCEDURE PCEndBuildImpModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : Name ;
BEGIN
Assert(CompilingImplementationModule()) ;
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
PopT(NameEnd) ;
PopT(NameStart) ;
|------------| |-----------|
*)
-PROCEDURE PCEndBuildProgModule ;
+PROCEDURE PCEndBuildProgModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : Name ;
BEGIN
Assert(CompilingProgramModule()) ;
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
PopT(NameEnd) ;
PopT(NameStart) ;
|------------| |-----------|
*)
-PROCEDURE PCEndBuildInnerModule ;
+PROCEDURE PCEndBuildInnerModule (tokno: CARDINAL) ;
VAR
NameStart,
NameEnd : Name ;
BEGIN
- CheckForUnknownInModule ;
+ CheckForUnknownInModule (tokno) ;
EndScope ;
PopT(NameEnd) ;
PopT(NameStart) ;
ImplementationOrProgramModule ) % PopAuto %
=:
-ProgramModule := % VAR begint, endt: CARDINAL ; %
+ProgramModule := % VAR begint, endt, namet: CARDINAL ; %
% begint := GetTokenNo () %
"MODULE" % M2Error.DefaultProgramModule %
% PushAutoOn %
% StartBuildInit (begint) %
Block % PushAutoOn %
% endt := GetTokenNo () -1 %
+ % namet := GetTokenNo () %
Ident % EndBuildFile (endt) %
- % P3EndBuildProgModule %
+ % P3EndBuildProgModule (namet) %
"." % PopAuto ;
EndBuildInit (endt) ;
PopAuto %
=:
-ImplementationModule := % VAR begint, endt: CARDINAL ; %
+ImplementationModule := % VAR begint, endt, namet: CARDINAL ; %
% begint := GetTokenNo () %
"IMPLEMENTATION" % M2Error.DefaultImplementationModule %
"MODULE" % PushAutoOn %
% StartBuildInit (begint) %
Block % PushAutoOn %
% endt := GetTokenNo () -1 %
+ % namet := GetTokenNo () %
Ident % EndBuildFile (endt) %
- % P3EndBuildImpModule %
+ % P3EndBuildImpModule (namet) %
"." % PopAuto ;
EndBuildInit (endt) ;
PopAuto ;
FormalType := { "ARRAY" "OF" } Qualident =:
-ModuleDeclaration := % VAR begint: CARDINAL ; %
+ModuleDeclaration := % VAR begint, namet: CARDINAL ; %
% begint := GetTokenNo () %
"MODULE" % M2Error.DefaultInnerModule %
% PushAutoOn %
} [ Export
]
Block % PushAutoOn %
- Ident % EndBuildInnerModule %
+ % namet := GetTokenNo () %
+ Ident % EndBuildInnerModule (namet) %
% PopAuto ; PopAuto ; PopAuto %
=:
"IMPORT"
IdentList ";" =:
-DefinitionModule := % VAR begint, endt: CARDINAL ; %
+DefinitionModule := % VAR begint, endt, namet: CARDINAL ; %
% begint := GetTokenNo () %
"DEFINITION" % M2Error.DefaultDefinitionModule %
"MODULE" % PushAutoOn %
]
{ Definition } % endt := GetTokenNo () %
"END" % PushAutoOn %
+ % namet := GetTokenNo () %
Ident % EndBuildFile (endt) ;
- P3EndBuildDefModule %
+ P3EndBuildDefModule (namet) %
"." % PopAuto ; PopAuto ; PopAuto %
=:
an error message is displayed.
*)
-PROCEDURE CheckForUnknownInModule ;
+PROCEDURE CheckForUnknownInModule (tokno: CARDINAL) ;
(*
an error message is displayed.
*)
-PROCEDURE CheckForUnknownInModule ;
+PROCEDURE CheckForUnknownInModule (tokno: CARDINAL) ;
VAR
pSym: PtrToSymbol ;
BEGIN
- pSym := GetPsym(GetCurrentModuleScope()) ;
+ pSym := GetPsym (GetCurrentModuleScope ()) ;
WITH pSym^ DO
CASE SymbolType OF
DefImpSym: WITH DefImp DO
- CheckForUnknowns (name, ExportQualifiedTree,
+ CheckForUnknowns (tokno, name, ExportQualifiedTree,
'EXPORT QUALIFIED') ;
- CheckForUnknowns (name, ExportUnQualifiedTree,
+ CheckForUnknowns (tokno, name, ExportUnQualifiedTree,
'EXPORT UNQUALIFIED') ;
- CheckForSymbols (ExportRequest,
- 'requested by another modules import (symbols have not been exported by the appropriate definition module)') ;
- CheckForUnknowns (name, Unresolved, 'unresolved') ;
- CheckForUnknowns (name, LocalSymbols, 'locally used')
+ CheckForSymbols (ExportRequest,
+ 'requested by another modules import (symbols have not been exported by the appropriate definition module)') ;
+ CheckForUnknowns (tokno, name, Unresolved, 'unresolved') ;
+ CheckForUnknowns (tokno, name, LocalSymbols, 'locally used')
END |
ModuleSym: WITH Module DO
- CheckForUnknowns (name, Unresolved, 'unresolved') ;
- CheckForUnknowns (name, ExportUndeclared, 'exported but undeclared') ;
- CheckForUnknowns (name, ExportTree, 'exported but undeclared') ;
- CheckForUnknowns (name, LocalSymbols, 'locally used')
+ CheckForUnknowns (tokno, name, Unresolved, 'unresolved') ;
+ CheckForUnknowns (tokno, name, ExportUndeclared, 'exported but undeclared') ;
+ CheckForUnknowns (tokno, name, ExportTree, 'exported but undeclared') ;
+ CheckForUnknowns (tokno, name, LocalSymbols, 'locally used')
END
ELSE
IF IsUnreportedUnknown (sym)
THEN
IncludeElementIntoSet (ReportedUnknowns, sym) ;
- MetaErrorStringT1 (GetFirstUsed (sym), InitString ("unknown symbol {%1EUad}"), sym)
+ MetaErrorStringT1 (GetFirstUsed (sym), InitString ("unknown symbol {%1EUad} {%1&s}"), sym)
END
END UnknownSymbolError ;
together with an error message.
*)
-PROCEDURE CheckForUnknowns (name: Name; Tree: SymbolTree;
+PROCEDURE CheckForUnknowns (tokno: CARDINAL; name: Name; Tree: SymbolTree;
a: ARRAY OF CHAR) ;
VAR
s: String ;
BEGIN
- IF DoesTreeContainAny(Tree, IsUnreportedUnknown)
- THEN
- CurrentError := NewError(GetTokenNo()) ;
- s := InitString("{%E} the following unknown symbols in module %<") ;
- s := ConCat(s, Mark(InitStringCharStar(KeyToCharStar(name)))) ;
- s := ConCat(s, Mark(InitString('%> were '))) ;
- s := ConCat(s, Mark(InitString(a))) ;
- s := ConCat (s, Mark (InitString (': '))) ;
- s := ConCat (s, Mark (Listify (Tree, IsUnreportedUnknown))) ;
- MetaErrorStringT0(GetTokenNo(), s) ;
- ForeachNodeDo(Tree, UnknownSymbolError)
+ IF DoesTreeContainAny (Tree, IsUnreportedUnknown)
+ THEN
+ ForeachNodeDo (Tree, UnknownSymbolError) ;
+ IF NoOfNodes (Tree, IsUnreportedUnknown) > 0
+ THEN
+ s := InitString ("{%E} the following unknown symbols in module %<") ;
+ s := ConCat (s, Mark (InitStringCharStar (KeyToCharStar (name)))) ;
+ s := ConCat (s, Mark (InitString ('%> were '))) ;
+ s := ConCat (s, Mark (InitString (a))) ;
+ s := ConCat (s, Mark (InitString (': '))) ;
+ s := ConCat (s, Mark (Listify (Tree, IsUnreportedUnknown))) ;
+ MetaErrorStringT0 (tokno, s)
+ END
END
END CheckForUnknowns ;
--- /dev/null
+MODULE badconst ;
+
+CONST
+ foo = 1 ;
+BEGIN
+ IF Foo = 1
+ THEN
+ END
+END badconst.
--- /dev/null
+MODULE badtype ;
+
+FROM SYSTEM IMPORT TSIZE ;
+
+TYPE
+ foo = CARDINAL ;
+BEGIN
+ IF TSIZE (Foo) = 1
+ THEN
+ END
+END badtype.
--- /dev/null
+MODULE badvar ;
+
+VAR
+ foo: CARDINAL ;
+BEGIN
+ Foo := 1
+END badvar.