blob: b78d0fbab551a7e00ab79fa714cbb6ce628e3d62 [file] [log] [blame]
(* M2StateCheck.def provide state check tracking for declarations.
Copyright (C) 2024-2025 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
This file is part of GNU Modula-2.
GNU Modula-2 is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Modula-2 is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Modula-2; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. *)
DEFINITION MODULE M2StateCheck ;
(* This module provides state tracking for VAR, TYPE and CONST
declarations. It should be used by any pass creating
symbols in these blocks and it will detect a constant
being created from a variable, type from a variable,
variable from a constant (instead of type) etc. *)
TYPE
StateCheck ;
(*
InitState - returns a new initialized StateCheck.
*)
PROCEDURE InitState () : StateCheck ;
(*
KillState - destructor for StateCheck.
*)
PROCEDURE KillState (VAR s: StateCheck) ;
(*
PushState - duplicates the StateCheck s and chains the new copy to s.
Return the copy.
*)
PROCEDURE PushState (VAR s: StateCheck) ;
(*
PopState - pops the current state.
*)
PROCEDURE PopState (VAR s: StateCheck) ;
(*
InclVar - s := s + {var}.
*)
PROCEDURE InclVar (s: StateCheck) ;
(*
InclConst - s := s + {const}.
*)
PROCEDURE InclConst (s: StateCheck) ;
(*
InclType - s := s + {type}.
*)
PROCEDURE InclType (s: StateCheck) ;
(*
InclConstFunc - s := s + {constfunc}.
*)
PROCEDURE InclConstFunc (s: StateCheck) ;
(*
InclVarParam - s := s + {varparam}.
*)
PROCEDURE InclVarParam (s: StateCheck) ;
(*
InclConstructor - s := s + {constructor}.
*)
PROCEDURE InclConstructor (s: StateCheck) ;
(*
ExclVar - s := s + {var}.
*)
PROCEDURE ExclVar (s: StateCheck) ;
(*
ExclConst - s := s + {const}.
*)
PROCEDURE ExclConst (s: StateCheck) ;
(*
ExclType - s := s + {type}.
*)
PROCEDURE ExclType (s: StateCheck) ;
(*
ExclConstFunc - s := s + {constfunc}.
*)
PROCEDURE ExclConstFunc (s: StateCheck) ;
(*
ExclVarParam - s := s + {varparam}.
*)
PROCEDURE ExclVarParam (s: StateCheck) ;
(*
ExclConstructor - s := s - {varparam}.
*)
PROCEDURE ExclConstructor (s: StateCheck) ;
(*
CheckQualident - checks to see that qualident sym is allowed in the state s.
*)
PROCEDURE CheckQualident (tok: CARDINAL; s: StateCheck; sym: CARDINAL) ;
END M2StateCheck.