1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT COMPILER COMPONENTS                         --
4--                                                                          --
5--                         R E P I N F O - I N P U T                        --
6--                                                                          --
7--                                 S p e c                                  --
8--                                                                          --
9--          Copyright (C) 2018-2020, Free Software Foundation, Inc.         --
10--                                                                          --
11-- GNAT is free software;  you can  redistribute it  and/or modify it under --
12-- terms of the  GNU General Public License as published  by the Free Soft- --
13-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17-- for  more details.  You should have  received  a copy of the GNU General --
18-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
19-- http://www.gnu.org/licenses for a complete copy of the license.          --
20--                                                                          --
21-- GNAT was originally developed  by the GNAT team at  New York University. --
22-- Extensive contributions were provided by Ada Core Technologies Inc.      --
23--                                                                          --
24------------------------------------------------------------------------------
25
26--  This package provides an alternate way of populating the internal tables
27--  of Repinfo from a JSON input rather than the binary blob of the tree file.
28--  Note that this is an additive mechanism, i.e. nothing is destroyed in the
29--  internal state of the unit when it is used.
30
31--  The first step is to feed the unit with a JSON stream of a specified format
32--  (see the spec of Repinfo for its description) by means of Read_JSON_Stream.
33--  Then, for each entity whose representation information is present in the
34--  JSON stream, the appropriate Get_JSON_* routines can be invoked to override
35--  the eponymous fields of the entity in the tree.
36
37package Repinfo.Input is
38
39   function Get_JSON_Esize (Name : String) return Node_Ref_Or_Val;
40   --  Returns the Esize value of the entity specified by Name, which is not
41   --  the component of a record type, or else No_Uint if no representation
42   --  information was supplied for the entity. Name is the full qualified name
43   --  of the entity in lower case letters.
44
45   function Get_JSON_RM_Size (Name : String) return Node_Ref_Or_Val;
46   --  Likewise for the RM_Size
47
48   function Get_JSON_Component_Size (Name : String) return Node_Ref_Or_Val;
49   --  Likewise for the Component_Size of an array type
50
51   function Get_JSON_Component_Bit_Offset
52     (Name        : String;
53      Record_Name : String) return Node_Ref_Or_Val;
54   --  Returns the Component_Bit_Offset of the component specified by Name,
55   --  which is declared in the record type specified by Record_Name, or else
56   --  No_Uint if no representation information was supplied for the component.
57   --  Name is the unqualified name of the component whereas Record_Name is the
58   --  full qualified name of the record type, both in lower case letters.
59
60   function Get_JSON_Esize
61     (Name        : String;
62      Record_Name : String) return Node_Ref_Or_Val;
63   --  Likewise for the Esize
64
65   Invalid_JSON_Stream : exception;
66   --  Raised if a format error is detected in the JSON stream
67
68   procedure Read_JSON_Stream (Text : Text_Buffer; File_Name : String);
69   --  Reads a JSON stream and populates internal tables from it. File_Name is
70   --  only used in error messages issued by the JSON parser.
71
72end Repinfo.Input;
73