------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- This source file was automatically generated by Platypus -- see http://dossen.univ-brest.fr/apl -- -- Any modification of this file will be lost. -- Please see the "platypus" directory instead : it contains the Cheddar's -- model and its meta-model. ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Cheddar is a GNU GPL real-time scheduling analysis tool. -- This program provides services to automatically check schedulability and -- other performance criteria of real-time architecture models. -- -- Copyright (C) 2002-2016 Frank Singhoff, Alain Plantec, Jerome Legrand -- -- The Cheddar project was started in 2002 by -- Frank Singhoff, Lab-STICC UMR 6285 laboratory, Université de Bretagne Occidentale -- -- Cheddar has been published in the "Agence de Protection des Programmes/France" in 2008. -- Since 2008, Ellidiss technologies also contributes to the development of -- Cheddar and provides industrial support. -- -- The full list of contributors and sponsors can be found in AUTHORS.txt and SPONSORS.txt -- -- This program 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 2 of the License, or -- (at your option) any later version. -- -- This program 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 this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- -- -- Contact : cheddar@listes.univ-brest.fr -- To post to this mailing list, you must be subscribed -- (see http//beru.univ-brest.fr/~singhoff/cheddar for details) -- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Framework_Config; use Framework_Config; with id_generators; use id_generators; with Objects; use Objects; with Laws; use Laws; with Expressions; use Expressions; with Convert_Strings; with Convert_Unbounded_Strings; with text_io; use text_io; with standards_io; use standards_io; use standards_io.boolean_io; use standards_io.natural_io; with Unbounded_Strings; use Unbounded_Strings; use unbounded_strings.Unbounded_String_List_Package; with Ada.Finalization; with Unchecked_Deallocation; with Primitive_XML_Strings; use Primitive_XML_Strings; with ada.strings.unbounded.text_io; use ada.strings.unbounded.text_io; Package Statements is type Generic_Statement; type Generic_Statement_Ptr is access all Generic_Statement'Class; type Nop_Statement; type Nop_Statement_Ptr is access all Nop_Statement'Class; type Exit_Statement; type Exit_Statement_Ptr is access all Exit_Statement'Class; type Put_Statement; type Put_Statement_Ptr is access all Put_Statement'Class; type If_Statement; type If_Statement_Ptr is access all If_Statement'Class; type Assign_Statement; type Assign_Statement_Ptr is access all Assign_Statement'Class; type Clock_Statement; type Clock_Statement_Ptr is access all Clock_Statement'Class; type Delete_Precedence_Statement; type Delete_Precedence_Statement_Ptr is access all Delete_Precedence_Statement'Class; type Add_Precedence_Statement; type Add_Precedence_Statement_Ptr is access all Add_Precedence_Statement'Class; type For_Statement; type For_Statement_Ptr is access all For_Statement'Class; type Return_Statement; type Return_Statement_Ptr is access all Return_Statement'Class; type While_Statement; type While_Statement_Ptr is access all While_Statement'Class; type Random_Initialize_Statement; type Random_Initialize_Statement_Ptr is access all Random_Initialize_Statement'Class; type Set_Statement; type Set_Statement_Ptr is access all Set_Statement'Class; type Subprogram_Statement; type Subprogram_Statement_Ptr is access all Subprogram_Statement'Class; type Subprogram_Call_Statement; type Subprogram_Call_Statement_Ptr is access all Subprogram_Call_Statement'Class; type Statements_Type is ( Put_Statement_Type, Nop_Statement_Type, Exit_Statement_Type, If_Statement_Type, Assign_Statement_Type, For_Statement_Type, Return_Statement_Type, While_Statement_Type, Add_Precedence_Statement_Type, Delete_Precedence_Statement_Type, Set_Statement_Type, Clock_Statement_Type, Subprogram_Statement_Type, Subprogram_Call_Statement_Type, Random_Initialize_Statement_Type); procedure To_Statements_Type is new Convert_Strings(Statements_Type, Put_Statement_Type); procedure To_Statements_Type is new Convert_Unbounded_Strings(Statements_Type, Put_Statement_Type); function XML_String (obj : in Statements_Type) return Unbounded_String; function XML_Ref_String (obj : in Statements_Type) return Unbounded_String; package Statements_Type_io is new text_io.enumeration_io(Statements_Type); use Statements_Type_io; type Table_Types is ( Task_Table_Type, Message_Table_Type, Processor_Table_Type, Buffer_Table_Type, Time_Unit_Table_Type, Resource_Table_Type); procedure To_Table_Types is new Convert_Strings(Table_Types, Task_Table_Type); procedure To_Table_Types is new Convert_Unbounded_Strings(Table_Types, Task_Table_Type); function XML_String (obj : in Table_Types) return Unbounded_String; function XML_Ref_String (obj : in Table_Types) return Unbounded_String; package Table_Types_io is new text_io.enumeration_io(Table_Types); use Table_Types_io; -- --------= Generic_Statement =-------- type Generic_Statement is new Generic_Object with record statement_type : Statements_Type; line_number : Natural; file_name : Unbounded_String; next_statement : Generic_Statement_Ptr; end record; procedure Initialize(obj : in out Generic_Statement); procedure Put(obj : in Generic_Statement); procedure Put(obj : in Generic_Statement_Ptr); procedure Put_Name(obj : in Generic_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Generic_Statement; result : in out Unbounded_String); function XML_String(obj : in Generic_Statement) return Unbounded_String; function XML_String(obj : in Generic_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Generic_Statement) return Unbounded_String; function XML_Ref_String(obj : in Generic_Statement_Ptr) return Unbounded_String; function Copy(obj : in Generic_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Generic_Statement) return Generic_Statement_Ptr; function type_of(obj : in Generic_Statement) return unbounded_string_list; function type_of(obj : in Generic_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Generic_Statement'Class, Generic_Statement_Ptr); -- --------= Nop_Statement =-------- type Nop_Statement is new Generic_Statement with null record; procedure Initialize(obj : in out Nop_Statement); procedure Put(obj : in Nop_Statement); procedure Put(obj : in Nop_Statement_Ptr); procedure Put_Name(obj : in Nop_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Nop_Statement; result : in out Unbounded_String); function XML_String(obj : in Nop_Statement) return Unbounded_String; function XML_String(obj : in Nop_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Nop_Statement) return Unbounded_String; function XML_Ref_String(obj : in Nop_Statement_Ptr) return Unbounded_String; function Copy(obj : in Nop_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Nop_Statement) return Generic_Statement_Ptr; function type_of(obj : in Nop_Statement) return unbounded_string_list; function type_of(obj : in Nop_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Nop_Statement'Class, Nop_Statement_Ptr); -- --------= Exit_Statement =-------- type Exit_Statement is new Generic_Statement with null record; procedure Initialize(obj : in out Exit_Statement); procedure Put(obj : in Exit_Statement); procedure Put(obj : in Exit_Statement_Ptr); procedure Put_Name(obj : in Exit_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Exit_Statement; result : in out Unbounded_String); function XML_String(obj : in Exit_Statement) return Unbounded_String; function XML_String(obj : in Exit_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Exit_Statement) return Unbounded_String; function XML_Ref_String(obj : in Exit_Statement_Ptr) return Unbounded_String; function Copy(obj : in Exit_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Exit_Statement) return Generic_Statement_Ptr; function type_of(obj : in Exit_Statement) return unbounded_string_list; function type_of(obj : in Exit_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Exit_Statement'Class, Exit_Statement_Ptr); -- --------= Put_Statement =-------- type Put_Statement is new Generic_Statement with record put_from : Generic_Expression_Ptr; put_to : Generic_Expression_Ptr; expression_to_be_displayed : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out Put_Statement); procedure Put(obj : in Put_Statement); procedure Put(obj : in Put_Statement_Ptr); procedure Put_Name(obj : in Put_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Put_Statement; result : in out Unbounded_String); function XML_String(obj : in Put_Statement) return Unbounded_String; function XML_String(obj : in Put_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Put_Statement) return Unbounded_String; function XML_Ref_String(obj : in Put_Statement_Ptr) return Unbounded_String; function Copy(obj : in Put_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Put_Statement) return Generic_Statement_Ptr; function type_of(obj : in Put_Statement) return unbounded_string_list; function type_of(obj : in Put_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Put_Statement'Class, Put_Statement_Ptr); -- --------= If_Statement =-------- type If_Statement is new Generic_Statement with record bool_expression : Generic_Expression_Ptr; else_statement : Generic_Statement_Ptr; then_statement : Generic_Statement_Ptr; end record; procedure Initialize(obj : in out If_Statement); procedure Put(obj : in If_Statement); procedure Put(obj : in If_Statement_Ptr); procedure Put_Name(obj : in If_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in If_Statement; result : in out Unbounded_String); function XML_String(obj : in If_Statement) return Unbounded_String; function XML_String(obj : in If_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in If_Statement) return Unbounded_String; function XML_Ref_String(obj : in If_Statement_Ptr) return Unbounded_String; function Copy(obj : in If_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in If_Statement) return Generic_Statement_Ptr; function type_of(obj : in If_Statement) return unbounded_string_list; function type_of(obj : in If_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (If_Statement'Class, If_Statement_Ptr); -- --------= Assign_Statement =-------- type Assign_Statement is new Generic_Statement with record lvalue : Generic_Expression_Ptr; rvalue : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out Assign_Statement); procedure Put(obj : in Assign_Statement); procedure Put(obj : in Assign_Statement_Ptr); procedure Put_Name(obj : in Assign_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Assign_Statement; result : in out Unbounded_String); function XML_String(obj : in Assign_Statement) return Unbounded_String; function XML_String(obj : in Assign_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Assign_Statement) return Unbounded_String; function XML_Ref_String(obj : in Assign_Statement_Ptr) return Unbounded_String; function Copy(obj : in Assign_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Assign_Statement) return Generic_Statement_Ptr; function type_of(obj : in Assign_Statement) return unbounded_string_list; function type_of(obj : in Assign_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Assign_Statement'Class, Assign_Statement_Ptr); -- --------= Clock_Statement =-------- type Clock_Statement is new Assign_Statement with null record; procedure Initialize(obj : in out Clock_Statement); procedure Put(obj : in Clock_Statement); procedure Put(obj : in Clock_Statement_Ptr); procedure Put_Name(obj : in Clock_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Clock_Statement; result : in out Unbounded_String); function XML_String(obj : in Clock_Statement) return Unbounded_String; function XML_String(obj : in Clock_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Clock_Statement) return Unbounded_String; function XML_Ref_String(obj : in Clock_Statement_Ptr) return Unbounded_String; function Copy(obj : in Clock_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Clock_Statement) return Generic_Statement_Ptr; function type_of(obj : in Clock_Statement) return unbounded_string_list; function type_of(obj : in Clock_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Clock_Statement'Class, Clock_Statement_Ptr); -- --------= Delete_Precedence_Statement =-------- type Delete_Precedence_Statement is new Generic_Statement with record Delete_Source : Unbounded_String; Delete_Sink : Unbounded_String; end record; procedure Initialize(obj : in out Delete_Precedence_Statement); procedure Put(obj : in Delete_Precedence_Statement); procedure Put(obj : in Delete_Precedence_Statement_Ptr); procedure Put_Name(obj : in Delete_Precedence_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Delete_Precedence_Statement; result : in out Unbounded_String); function XML_String(obj : in Delete_Precedence_Statement) return Unbounded_String; function XML_String(obj : in Delete_Precedence_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Delete_Precedence_Statement) return Unbounded_String; function XML_Ref_String(obj : in Delete_Precedence_Statement_Ptr) return Unbounded_String; function Copy(obj : in Delete_Precedence_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Delete_Precedence_Statement) return Generic_Statement_Ptr; function type_of(obj : in Delete_Precedence_Statement) return unbounded_string_list; function type_of(obj : in Delete_Precedence_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Delete_Precedence_Statement'Class, Delete_Precedence_Statement_Ptr); -- --------= Add_Precedence_Statement =-------- type Add_Precedence_Statement is new Generic_Statement with record Add_Source : Unbounded_String; Add_Sink : Unbounded_String; end record; procedure Initialize(obj : in out Add_Precedence_Statement); procedure Put(obj : in Add_Precedence_Statement); procedure Put(obj : in Add_Precedence_Statement_Ptr); procedure Put_Name(obj : in Add_Precedence_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Add_Precedence_Statement; result : in out Unbounded_String); function XML_String(obj : in Add_Precedence_Statement) return Unbounded_String; function XML_String(obj : in Add_Precedence_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Add_Precedence_Statement) return Unbounded_String; function XML_Ref_String(obj : in Add_Precedence_Statement_Ptr) return Unbounded_String; function Copy(obj : in Add_Precedence_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Add_Precedence_Statement) return Generic_Statement_Ptr; function type_of(obj : in Add_Precedence_Statement) return unbounded_string_list; function type_of(obj : in Add_Precedence_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Add_Precedence_Statement'Class, Add_Precedence_Statement_Ptr); -- --------= For_Statement =-------- type For_Statement is new Generic_Statement with record for_type : Table_Types; included_statement : Generic_Statement_Ptr; for_index : Variable_Expression_Ptr; end record; procedure Initialize(obj : in out For_Statement); procedure Put(obj : in For_Statement); procedure Put(obj : in For_Statement_Ptr); procedure Put_Name(obj : in For_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in For_Statement; result : in out Unbounded_String); function XML_String(obj : in For_Statement) return Unbounded_String; function XML_String(obj : in For_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in For_Statement) return Unbounded_String; function XML_Ref_String(obj : in For_Statement_Ptr) return Unbounded_String; function Copy(obj : in For_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in For_Statement) return Generic_Statement_Ptr; function type_of(obj : in For_Statement) return unbounded_string_list; function type_of(obj : in For_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (For_Statement'Class, For_Statement_Ptr); -- --------= Return_Statement =-------- type Return_Statement is new Generic_Statement with record return_value : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out Return_Statement); procedure Put(obj : in Return_Statement); procedure Put(obj : in Return_Statement_Ptr); procedure Put_Name(obj : in Return_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Return_Statement; result : in out Unbounded_String); function XML_String(obj : in Return_Statement) return Unbounded_String; function XML_String(obj : in Return_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Return_Statement) return Unbounded_String; function XML_Ref_String(obj : in Return_Statement_Ptr) return Unbounded_String; function Copy(obj : in Return_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Return_Statement) return Generic_Statement_Ptr; function type_of(obj : in Return_Statement) return unbounded_string_list; function type_of(obj : in Return_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Return_Statement'Class, Return_Statement_Ptr); -- --------= While_Statement =-------- type While_Statement is new Generic_Statement with record included_statement : Generic_Statement_Ptr; condition : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out While_Statement); procedure Put(obj : in While_Statement); procedure Put(obj : in While_Statement_Ptr); procedure Put_Name(obj : in While_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in While_Statement; result : in out Unbounded_String); function XML_String(obj : in While_Statement) return Unbounded_String; function XML_String(obj : in While_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in While_Statement) return Unbounded_String; function XML_Ref_String(obj : in While_Statement_Ptr) return Unbounded_String; function Copy(obj : in While_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in While_Statement) return Generic_Statement_Ptr; function type_of(obj : in While_Statement) return unbounded_string_list; function type_of(obj : in While_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (While_Statement'Class, While_Statement_Ptr); -- --------= Random_Initialize_Statement =-------- type Random_Initialize_Statement is new Generic_Statement with record lvalue : Unbounded_String; law : Laws_Type; parameter1 : Generic_Expression_Ptr; parameter2 : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out Random_Initialize_Statement); procedure Put(obj : in Random_Initialize_Statement); procedure Put(obj : in Random_Initialize_Statement_Ptr); procedure Put_Name(obj : in Random_Initialize_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Random_Initialize_Statement; result : in out Unbounded_String); function XML_String(obj : in Random_Initialize_Statement) return Unbounded_String; function XML_String(obj : in Random_Initialize_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Random_Initialize_Statement) return Unbounded_String; function XML_Ref_String(obj : in Random_Initialize_Statement_Ptr) return Unbounded_String; function Copy(obj : in Random_Initialize_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Random_Initialize_Statement) return Generic_Statement_Ptr; function type_of(obj : in Random_Initialize_Statement) return unbounded_string_list; function type_of(obj : in Random_Initialize_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Random_Initialize_Statement'Class, Random_Initialize_Statement_Ptr); -- --------= Set_Statement =-------- type Set_Statement is new Generic_Statement with record set_id : Unbounded_String; set_value : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out Set_Statement); procedure Put(obj : in Set_Statement); procedure Put(obj : in Set_Statement_Ptr); procedure Put_Name(obj : in Set_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Set_Statement; result : in out Unbounded_String); function XML_String(obj : in Set_Statement) return Unbounded_String; function XML_String(obj : in Set_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Set_Statement) return Unbounded_String; function XML_Ref_String(obj : in Set_Statement_Ptr) return Unbounded_String; function Copy(obj : in Set_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Set_Statement) return Generic_Statement_Ptr; function type_of(obj : in Set_Statement) return unbounded_string_list; function type_of(obj : in Set_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Set_Statement'Class, Set_Statement_Ptr); -- --------= Subprogram_Statement =-------- type Subprogram_Statement is new Generic_Statement with record included_statement : Generic_Statement_Ptr; is_a_function : Boolean; subprogram_name : Unbounded_String; end record; procedure Initialize(obj : in out Subprogram_Statement); procedure Put(obj : in Subprogram_Statement); procedure Put(obj : in Subprogram_Statement_Ptr); procedure Put_Name(obj : in Subprogram_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Subprogram_Statement; result : in out Unbounded_String); function XML_String(obj : in Subprogram_Statement) return Unbounded_String; function XML_String(obj : in Subprogram_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Subprogram_Statement) return Unbounded_String; function XML_Ref_String(obj : in Subprogram_Statement_Ptr) return Unbounded_String; function Copy(obj : in Subprogram_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Subprogram_Statement) return Generic_Statement_Ptr; function type_of(obj : in Subprogram_Statement) return unbounded_string_list; function type_of(obj : in Subprogram_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Subprogram_Statement'Class, Subprogram_Statement_Ptr); -- --------= Subprogram_Call_Statement =-------- type Subprogram_Call_Statement is new Generic_Statement with record is_a_function : Boolean; called_subprogram : Generic_Statement_Ptr; return_value : Generic_Expression_Ptr; end record; procedure Initialize(obj : in out Subprogram_Call_Statement); procedure Put(obj : in Subprogram_Call_Statement); procedure Put(obj : in Subprogram_Call_Statement_Ptr); procedure Put_Name(obj : in Subprogram_Call_Statement_Ptr); procedure Build_Attributes_XML_String(obj : in Subprogram_Call_Statement; result : in out Unbounded_String); function XML_String(obj : in Subprogram_Call_Statement) return Unbounded_String; function XML_String(obj : in Subprogram_Call_Statement_Ptr) return Unbounded_String; function XML_Ref_String(obj : in Subprogram_Call_Statement) return Unbounded_String; function XML_Ref_String(obj : in Subprogram_Call_Statement_Ptr) return Unbounded_String; function Copy(obj : in Subprogram_Call_Statement_Ptr) return Generic_Statement_Ptr; function Copy(obj : in Subprogram_Call_Statement) return Generic_Statement_Ptr; function type_of(obj : in Subprogram_Call_Statement) return unbounded_string_list; function type_of(obj : in Subprogram_Call_Statement_Ptr) return unbounded_string_list; procedure Free is new Unchecked_Deallocation (Subprogram_Call_Statement'Class, Subprogram_Call_Statement_Ptr); End Statements;