]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 8 Feb 2012 10:13:54 +0000 (11:13 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 8 Feb 2012 10:13:54 +0000 (11:13 +0100)
2012-02-08  Vincent Celier  <celier@adacore.com>

* gcc-interface/Make-lang.in: Add g-byorma.o to gnatbind objects
(g-buorma is now imported by sinput).
Update dependencies.
* scn.adb (Initialize_Scanner): Call Check_For_BOM
* sinput-p.adb (Source_File_Is_Subunit): Call Check_For_BOM
* sinput.adb: New procedure Check_For_BOM
* sinput.ads: New procedure Check_For_BOM

2012-02-08  Vincent Pucci  <pucci@adacore.com>

* impunit.adb: Dimension package names updated
* Makefile.rtl: s-dim added
* sem_dim.adb (Is_Procedure_Put_Call): minor changes
(Is_Dim_IO_Package_Instantiation): minor changes
* sem_dim.ads: minor changes in comments
* snames.ads-tmpl: Name_Dim added Name_Dim_Float_IO and
Name_Dim_Integer_IO removed
* s-dim.ads: New package. Define the dimension terminology.
* s-diflio.adb, s-diinio.adb, s-dimkio.ads, s-dimmks.ads,
* s-dmotpr.ads: Package names updated.
* s-diflio.ads, s-diinio.ads: Documentation added and package
names updated.

2012-02-08  Gary Dismukes  <dismukes@adacore.com>

* gcc-interface/utils2.c (build_call_alloc_dealloc_proc): Revise test
for storage pools to test for an underlying record type rather than
testing Is_Tagged_Type, so that simple storage pools will be handled
the same as normal Ada storage pools.

From-SVN: r184004

20 files changed:
gcc/ada/ChangeLog
gcc/ada/Makefile.rtl
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gcc-interface/utils2.c
gcc/ada/impunit.adb
gcc/ada/s-diflio.adb
gcc/ada/s-diflio.ads
gcc/ada/s-diinio.adb
gcc/ada/s-diinio.ads
gcc/ada/s-dim.ads [new file with mode: 0644]
gcc/ada/s-dimkio.ads
gcc/ada/s-dimmks.ads
gcc/ada/s-dmotpr.ads
gcc/ada/scn.adb
gcc/ada/sem_dim.adb
gcc/ada/sem_dim.ads
gcc/ada/sinput-p.adb
gcc/ada/sinput.adb
gcc/ada/sinput.ads
gcc/ada/snames.ads-tmpl

index 937fbee3d8d2290a1618cc417412ed52bbea5b1c..8fa6556de4a8827ec80280b5b33d3a7c84a5429b 100644 (file)
@@ -1,3 +1,35 @@
+2012-02-08  Vincent Celier  <celier@adacore.com>
+
+       * gcc-interface/Make-lang.in: Add g-byorma.o to gnatbind objects
+       (g-buorma is now imported by sinput).
+       Update dependencies.
+       * scn.adb (Initialize_Scanner): Call Check_For_BOM
+       * sinput-p.adb (Source_File_Is_Subunit): Call Check_For_BOM
+       * sinput.adb: New procedure Check_For_BOM
+       * sinput.ads: New procedure Check_For_BOM
+
+2012-02-08  Vincent Pucci  <pucci@adacore.com>
+
+       * impunit.adb: Dimension package names updated
+       * Makefile.rtl: s-dim added
+       * sem_dim.adb (Is_Procedure_Put_Call): minor changes
+       (Is_Dim_IO_Package_Instantiation): minor changes
+       * sem_dim.ads: minor changes in comments
+       * snames.ads-tmpl: Name_Dim added Name_Dim_Float_IO and
+       Name_Dim_Integer_IO removed
+       * s-dim.ads: New package. Define the dimension terminology.
+       * s-diflio.adb, s-diinio.adb, s-dimkio.ads, s-dimmks.ads,
+       * s-dmotpr.ads: Package names updated.
+       * s-diflio.ads, s-diinio.ads: Documentation added and package
+       names updated.
+
+2012-02-08  Gary Dismukes  <dismukes@adacore.com>
+
+       * gcc-interface/utils2.c (build_call_alloc_dealloc_proc): Revise test
+       for storage pools to test for an underlying record type rather than
+       testing Is_Tagged_Type, so that simple storage pools will be handled
+       the same as normal Ada storage pools.
+
 2012-02-08  Yannick Moy  <moy@adacore.com>
 
        * gnat_rm.texi: Minor reshuffling to place restriction at
index 8f8e17646cfb02a12ae41fd3f7cf0c90c10de3ec..71696585458ed5d3b31fd52415c3d57b49da86fd 100644 (file)
@@ -505,6 +505,7 @@ GNATRTL_NONTASKING_OBJS= \
   s-crtl$(objext)   \
   s-crtrun$(objext) \
   s-diflio$(objext) \
+  s-dim$(objext)    \
   s-diinio$(objext) \
   s-dimkio$(objext) \
   s-dimmks$(objext) \
index f6ca6083bb2965cf55bcbdccaccdc924b398c9b9..0393d06dcc9fd341d4f2ca274998e4c6402bf19e 100644 (file)
@@ -453,6 +453,7 @@ GNATBIND_OBJS = \
  ada/fmap.o       \
  ada/fname.o      \
  ada/fname-uf.o   \
+ ada/g-byorma.o   \
  ada/g-hesora.o   \
  ada/g-htable.o   \
  ada/s-os_lib.o   \
@@ -2435,31 +2436,33 @@ ada/exp_intr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/errout.adb ada/erroutc.ads ada/erroutc.adb ada/eval_fat.ads \
    ada/exp_aggr.ads ada/exp_atag.ads ada/exp_ch11.ads ada/exp_ch2.ads \
    ada/exp_ch4.ads ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_code.ads \
-   ada/exp_fixd.ads ada/exp_intr.ads ada/exp_intr.adb ada/exp_pakd.ads \
-   ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/expander.ads \
-   ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \
-   ada/gnat.ads ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads \
-   ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \
-   ada/lib.ads ada/lib-load.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
+   ada/exp_disp.ads ada/exp_fixd.ads ada/exp_intr.ads ada/exp_intr.adb \
+   ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb \
+   ada/expander.ads ada/fname.ads ada/fname-uf.ads ada/freeze.ads \
+   ada/get_targ.ads ada/gnat.ads ada/g-htable.ads ada/gnatvsn.ads \
+   ada/hlo.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \
+   ada/itypes.ads ada/lib.ads ada/lib-load.ads ada/lib-util.ads \
+   ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \
    ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
-   ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
-   ada/scans.ads ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \
-   ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads ada/sem_ch13.ads \
-   ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads \
-   ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_ch9.ads \
-   ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_type.ads \
-   ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
-   ada/sinput.ads ada/sinput.adb ada/snames.ads ada/sprint.ads \
-   ada/stand.ads ada/stringt.ads ada/stylesw.ads ada/system.ads \
-   ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
-   ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
-   ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
-   ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
-   ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
-   ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
-   ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
-   ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
-   ada/validsw.ads ada/widechar.ads 
+   ada/put_alfa.ads ada/restrict.ads ada/restrict.adb ada/rident.ads \
+   ada/rtsfind.ads ada/scans.ads ada/sem.ads ada/sem.adb ada/sem_attr.ads \
+   ada/sem_aux.ads ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads \
+   ada/sem_ch13.ads ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads \
+   ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads \
+   ada/sem_ch9.ads ada/sem_disp.ads ada/sem_eval.ads ada/sem_prag.ads \
+   ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+   ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+   ada/sinput.adb ada/snames.ads ada/sprint.ads ada/stand.ads \
+   ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
+   ada/stylesw.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
+   ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+   ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+   ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+   ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
+   ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
+   ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+   ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+   ada/urealp.ads ada/urealp.adb ada/validsw.ads ada/widechar.ads 
 
 ada/exp_pakd.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
    ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
index 93663b48982757267380b418c3eaba5c7271d27c..e0ddf2f6a37d7be350a5bd83e9cccdc75e617db4 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *          Copyright (C) 1992-2011, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2012, Free Software Foundation, Inc.         *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
@@ -2003,9 +2003,10 @@ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
   tree gnu_proc = gnat_to_gnu (gnat_proc);
   tree gnu_call;
 
-  /* The storage pools are obviously always tagged types, but the
-     secondary stack uses the same mechanism and is not tagged.  */
-  if (Is_Tagged_Type (Etype (gnat_pool)))
+  /* A storage pool's underlying type is a record type (for both predefined
+     storage pools and GNAT simple storage pools). The secondary stack uses
+     the same mechanism, but its pool object (SS_Pool) is an integer.  */
+  if (Is_Record_Type (Underlying_Type (Etype (gnat_pool))))
     {
       /* The size is the third parameter; the alignment is the
         same type.  */
index b1903d3542c56615a94a875e8a42b21ea7f19f60..99d0c27140b974d6e19316d90ed8ebd267e897a9 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---           Copyright (C) 2000-2011, Free Software Foundation, Inc.        --
+--           Copyright (C) 2000-2012, Free Software Foundation, Inc.        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -366,11 +366,11 @@ package body Impunit is
 
     ("s-addima", F),  -- System.Address_Image
     ("s-assert", F),  -- System.Assertions
-    ("s-diflio", F),  -- System.Dim_Float_IO
-    ("s-diinio", F),  -- System.Dim_Integer_IO
-    ("s-dimkio", F),  -- System.Dim_Mks_IO
-    ("s-dimmks", F),  -- System.Dim_Mks
-    ("s-dmotpr", F),  -- System.Dim_Mks.Other_Prefixes
+    ("s-diflio", F),  -- System.Dim.Float_IO
+    ("s-diinio", F),  -- System.Dim.Integer_IO
+    ("s-dimkio", F),  -- System.Dim.Mks_IO
+    ("s-dimmks", F),  -- System.Dim.Mks
+    ("s-dmotpr", F),  -- System.Dim.Mks.Other_Prefixes
     ("s-memory", F),  -- System.Memory
     ("s-parint", F),  -- System.Partition_Interface
     ("s-pooglo", F),  -- System.Pool_Global
index 82c47bddf003c3548a7452c41831250d980e5686..644018a529f7fbb260b23252cf2e65f9861c3acb 100644 (file)
@@ -2,7 +2,7 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---                    S Y S T E M . D I M _ F L O A T _ I O                 --
+--                    S Y S T E M . D I M . F L O A T _ I O                 --
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
@@ -29,7 +29,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-package body System.Dim_Float_IO is
+package body System.Dim.Float_IO is
 
    package Num_Dim_Float_IO is new Ada.Text_IO.Float_IO (Num_Dim_Float);
 
@@ -74,4 +74,4 @@ package body System.Dim_Float_IO is
       To := To & Symbols;
    end Put;
 
-end System.Dim_Float_IO;
+end System.Dim.Float_IO;
index 7e705f5b1188a39a2dda1535f6209b445766167d..e914af056672d45d3dbbefd6300caea26d3a70cc 100644 (file)
@@ -2,7 +2,7 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---                    S Y S T E M . D I M _ F L O A T _ I O                 --
+--                    S Y S T E M . D I M . F L O A T _ I O                 --
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This package is a generic package that provides IO facilities for float
---  dimensioned types.
+--  This package provides output routines for float dimensioned types. All Put
+--  routines are modelled after those in package Ada.Text_IO.Float_IO with the
+--  addition of an extra default parameter.
 
---  Note that there is a default string parameter in every Put routine
---  rewritten at compile time to output the corresponding dimensions as a
---  suffix of the numeric value.
+--  Parameter Symbol may be used in the following manner (all the examples are
+--  based on the MKS system of units as defined in package System.Dim.Mks):
+
+--  Case 1. A value is supplied for Symbol
+
+--    The string appears as a suffix of Item
+
+--      Obj : Mks_Type := 2.6;
+--      Put (Obj, 1, 1, 0, " dimensionless");
+
+--      The corresponding output is: 2.6 dimensionless
+
+--  Case 2. No value is supplied for Symbol and Item is dimensionless
+
+--    Item appears without a suffix
+
+--      Obj : Mks_Type := 2.6;
+--      Put (Obj, 1, 1, 0);
+
+--      The corresponding output is: 2.6
+
+--  Case 3. No value is supplied for Symbol and Item has a dimension
+
+--    If the type of Item is a dimensioned subtype whose symbolic name is not
+--    empty, then the symbolic name appears as a suffix.
+
+--      subtype Length is Mks_Type
+--        with
+--         Dimension => ('m',
+--           Meter =>  1,
+--           others => 0);
+
+--      Obj : Length := 2.3 * dm;
+--      Put (Obj, 1, 2, 0);
+
+--      The corresponding output is: 0.23 m
+
+--    Otherwise, a new string is created and appears as a suffix of Item.
+--    This string results in the successive concatanations between each
+--    dimension symbolic name raised by its corresponding dimension power from
+--    the dimensions of Item.
+
+--      subtype Random is Mks_Type
+--        with
+--         Dimension => ("",
+--         Meter =>   3,
+--         Candela => -1,
+--         others =>  0);
+
+--      Obj : Random := 5.0;
+--      Put (Obj);
+
+--      The corresponding output is: 5.0 m**3.cd**(-1)
+
+--      Put (3.3 * km * dm * min, 5, 1, 0);
+
+--      The corresponding output is: 19800.0 m**2.s
 
 with Ada.Text_IO; use Ada.Text_IO;
 
 generic
    type Num_Dim_Float is digits <>;
 
-package System.Dim_Float_IO is
+package System.Dim.Float_IO is
 
    Default_Fore : Field := 2;
    Default_Aft  : Field := Num_Dim_Float'Digits - 1;
@@ -71,4 +126,4 @@ package System.Dim_Float_IO is
 
    pragma Inline (Put);
 
-end System.Dim_Float_IO;
+end System.Dim.Float_IO;
index c1de526545110bd0fd0a7a8bd266647a1cd140cc..42ad688c6b82a04b05d82f766bfa144a33682259 100644 (file)
@@ -2,7 +2,7 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---                  S Y S T E M . D I M _ I N T E G E R _ I O               --
+--                  S Y S T E M . D I M . I N T E G E R _ I O               --
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
@@ -29,7 +29,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-package body System.Dim_Integer_IO is
+package body System.Dim.Integer_IO is
 
    package Num_Dim_Integer_IO is new Ada.Text_IO.Integer_IO (Num_Dim_Integer);
 
@@ -74,4 +74,4 @@ package body System.Dim_Integer_IO is
       To := To & Symbols;
    end Put;
 
-end System.Dim_Integer_IO;
+end System.Dim.Integer_IO;
index dfbcb79375548c11cf083d297cdc3c679dac9b87..eab6a52611906526eae43d982839a87c98bbb689 100644 (file)
@@ -2,7 +2,7 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---                  S Y S T E M . D I M _ I N T E G E R _ I O               --
+--                  S Y S T E M . D I M . I N T E G E R _ I O               --
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This package is a generic package that provides IO facilities for integer
---  dimensioned types.
+--  This package provides output routines for integer dimensioned types. All
+--  Put routines are modelled after those in package Ada.Text_IO.Integer_IO
+--  with the addition of an extra default parameter.
 
---  Note that there is a default string parameter in every Put routine
---  rewritten at compile time to output the corresponding dimensions as a
---  suffix of the numeric value.
+--  All the examples in this package are based on the MKS system of units:
+
+--    type Mks_Type is new Integer
+--      with
+--       Dimension_System => ((Meter, 'm'),
+--         (Kilogram, "kg"),
+--         (Second,   's'),
+--         (Ampere,   'A'),
+--         (Kelvin,   'K'),
+--         (Mole,     "mol"),
+--         (Candela,  "cd"));
+
+--  Parameter Symbol may be used in the following manner:
+
+--  Case 1. A value is supplied for Symbol
+
+--    The string appears as a suffix of Item
+
+--      Obj : Mks_Type := 2;
+--      Put (Obj, Symbols => " dimensionless");
+
+--      The corresponding output is: 2 dimensionless
+
+--  Case 2. No value is supplied for Symbol and Item is dimensionless
+
+--    Item appears without a suffix
+
+--      Obj : Mks_Type := 2;
+--      Put (Obj);
+
+--      The corresponding output is: 2
+
+--  Case 3. No value is supplied for Symbol and Item has a dimension
+
+--    If the type of Item is a dimensioned subtype whose symbolic name is not
+--    empty, then the symbolic name appears as a suffix.
+
+--      subtype Length is Mks_Type
+--        with
+--         Dimension => ('m',
+--           Meter =>  1,
+--           others => 0);
+
+--      Obj : Length := 2;
+--      Put (Obj);
+
+--      The corresponding output is: 2 m
+
+--    Otherwise, a new string is created and appears as a suffix of Item.
+--    This string results in the successive concatanations between each
+--    dimension symbolic name raised by its corresponding dimension power from
+--    the dimensions of Item.
+
+--      subtype Random is Mks_Type
+--        with
+--         Dimension => ("",
+--         Meter =>   3,
+--         Candela => 2,
+--         others =>  0);
+
+--      Obj : Random := 5;
+--      Put (Obj);
+
+--      The corresponding output is: 5 m**3.cd**2
 
 with Ada.Text_IO; use Ada.Text_IO;
 
 generic
    type Num_Dim_Integer is range <>;
 
-package System.Dim_Integer_IO is
+package System.Dim.Integer_IO is
 
    Default_Width : Field       := Num_Dim_Integer'Width;
    Default_Base  : Number_Base := 10;
@@ -67,4 +129,4 @@ package System.Dim_Integer_IO is
 
    pragma Inline (Put);
 
-end System.Dim_Integer_IO;
+end System.Dim.Integer_IO;
diff --git a/gcc/ada/s-dim.ads b/gcc/ada/s-dim.ads
new file mode 100644 (file)
index 0000000..183aaab
--- /dev/null
@@ -0,0 +1,69 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                           S Y S T E M . D I M                            --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--             Copyright (C) 2012, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Defines the dimension terminology
+
+---------------------------
+-- Dimension Terminology --
+---------------------------
+
+--  * Dimensioned type
+
+--    A dimensioned type is a type (more accurately a first subtype) to which
+--    the aspect Dimension_System applies to.
+
+--      type Mks_Type is new Long_Long_Float
+--        with
+--         Dimension_System => ((Meter, 'm'),
+--           (Kilogram, "kg"),
+--           (Second,   's'),
+--           (Ampere,   'A'),
+--           (Kelvin,   'K'),
+--           (Mole,     "mol"),
+--           (Candela,  "cd"));
+
+--      'm' is the symbolic name of dimension Meter
+
+--  * Dimensioned subtype
+
+--    A dimensioned subtype is a subtype directly defined from the dimensioned
+--    type and to which the aspect Dimension applies to.
+
+--      subtype Length is Mks_Type
+--        with
+--         Dimension => ('m',
+--           Meter =>  1,
+--           others => 0);
+
+--      'm' is the symbolic name of dimensioned subtype Length
+
+package System.Dim is
+end System.Dim;
index eb8d8e695c5cacf3cdf026dc8508f432625a8897..b7f4de96eedc9e1897e449b50bce3edd6c6f8ee2 100644 (file)
@@ -2,11 +2,11 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---                     S Y S T E M . D I M _ M K S _ I O                    --
+--                     S Y S T E M . D I M . M K S _ I O                    --
 --                                                                          --
 --                                  S p e c                                 --
 --                                                                          --
---            Copyright (C) 2011, Free Software Foundation, Inc.            --
+--           Copyright (C) 2011-2012, Free Software Foundation, Inc.        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This package provides IO routines for the MKS dimension system (see
---  System.Dim_Mks).
+--  Provides output facilities for the MKS dimension system (see System.Dim.Mks
+--  and System.Dim.Float_IO).
 
-with System.Dim_Mks; use System.Dim_Mks;
-with System.Dim_Float_IO;
+with System.Dim.Mks; use System.Dim.Mks;
+with System.Dim.Float_IO;
 
-package System.Dim_Mks_IO is new System.Dim_Float_IO (Mks_Type);
+package System.Dim.Mks_IO is new System.Dim.Float_IO (Mks_Type);
index 1ee738721360a2ce86fe21c741cbcc1532415cf0..28e8563c73246e4581cc962c63044042e4df8ca1 100644 (file)
@@ -2,7 +2,7 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---                        S Y S T E M . D I M _ M K S                       --
+--                        S Y S T E M . D I M . M K S                       --
 --                                                                          --
 --                                  S p e c                                 --
 --                                                                          --
 --  System.Dim_Mks.Other_Prefixes) in order to avoid too many constant
 --  declarations in this package.
 
+--  The dimension terminology is defined in System.Dim_IO package
+
 with Ada.Numerics;
 
-package System.Dim_Mks is
+package System.Dim.Mks is
 
    e  : constant := Ada.Numerics.e;
    Pi : constant := Ada.Numerics.Pi;
@@ -54,7 +56,7 @@ package System.Dim_Mks is
         (Mole,     "mol"),
         (Candela,  "cd"));
 
-   --  SI Base
+   --  SI Base dimensioned subtype
 
    subtype Length is Mks_Type
      with
@@ -321,4 +323,4 @@ package System.Dim_Mks is
    kA  : constant Electric_Current := 1.0E+03;  -- kilo
    MeA : constant Electric_Current := 1.0E+06;  -- mega
 
-end System.Dim_Mks;
+end System.Dim.Mks;
index 57fa139e4d9692fab906fbc05e60647e00f08698..78bc57ee331be8f566651af770df153689177f12 100644 (file)
@@ -2,11 +2,11 @@
 --                                                                          --
 --                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
---         S Y S T E M . D I M _ M K S . O T H E R _ P R E F I X E S        --
+--         S Y S T E M . D I M . M K S . O T H E R _ P R E F I X E S        --
 --                                                                          --
 --                                  S p e c                                 --
 --                                                                          --
---            Copyright (C) 2011, Free Software Foundation, Inc.            --
+--           Copyright (C) 2011-2012, Free Software Foundation, Inc.        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -34,7 +34,7 @@
 --  These prefixes have been defined in a child package in order to avoid too
 --  many constant declarations in System.Dim_Mks.
 
-package System.Dim_Mks.Other_Prefixes is
+package System.Dim.Mks.Other_Prefixes is
 
    --  SI prefixes for Meter
 
@@ -165,4 +165,4 @@ package System.Dim_Mks.Other_Prefixes is
    Zecd : constant Luminous_Intensity := 1.0E+21;  -- zetta
    Yocd : constant Luminous_Intensity := 1.0E+24;  -- yotta
 
-end System.Dim_Mks.Other_Prefixes;
+end System.Dim.Mks.Other_Prefixes;
index ed6b1a87bebf9836b163fa232ecb3ccaf9891120..52431b3940bed2a6cfce918c63fd39c3eaf84f7b 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -28,7 +28,6 @@ with Csets;    use Csets;
 with Hostparm; use Hostparm;
 with Namet;    use Namet;
 with Opt;      use Opt;
-with Output;   use Output;
 with Restrict; use Restrict;
 with Rident;   use Rident;
 with Scans;    use Scans;
@@ -36,10 +35,6 @@ with Sinfo;    use Sinfo;
 with Sinput;   use Sinput;
 with Uintp;    use Uintp;
 
-with GNAT.Byte_Order_Mark; use GNAT.Byte_Order_Mark;
-
-with System.WCh_Con; use System.WCh_Con;
-
 package body Scn is
 
    use ASCII;
@@ -271,45 +266,7 @@ package body Scn is
          Set_License (Current_Source_File, Determine_License);
       end if;
 
-      --  Check for BOM
-
-      declare
-         BOM : BOM_Kind;
-         Len : Natural;
-         Tst : String (1 .. 5);
-
-      begin
-         for J in 1 .. 5 loop
-            Tst (J) := Source (Scan_Ptr + Source_Ptr (J) - 1);
-         end loop;
-
-         Read_BOM (Tst, Len, BOM, False);
-
-         case BOM is
-            when UTF8_All =>
-               Scan_Ptr := Scan_Ptr + Source_Ptr (Len);
-               Wide_Character_Encoding_Method := WCEM_UTF8;
-               Upper_Half_Encoding := True;
-
-            when UTF16_LE | UTF16_BE =>
-               Set_Standard_Error;
-               Write_Line ("UTF-16 encoding format not recognized");
-               Set_Standard_Output;
-               raise Unrecoverable_Error;
-
-            when UTF32_LE | UTF32_BE =>
-               Set_Standard_Error;
-               Write_Line ("UTF-32 encoding format not recognized");
-               Set_Standard_Output;
-               raise Unrecoverable_Error;
-
-            when Unknown =>
-               null;
-
-            when others =>
-               raise Program_Error;
-         end case;
-      end;
+      Check_For_BOM;
 
       --  Because of the License stuff above, Scng.Initialize_Scanner cannot
       --  call Scan. Scan initial token (note this initializes Prev_Token,
index f016c30428fed99ab3da7630c03f9429b1411df2..bb81a470b66c15dacd125e34f47da74d83f1728c 100644 (file)
@@ -2126,7 +2126,7 @@ package body Sem_Dim is
    -- Expand_Put_Call_With_Dimension_Symbol --
    -------------------------------------------
 
-   --  For procedure Put defined in System.Dim_Float_IO/System.Dim_Integer_IO,
+   --  For procedure Put defined in System.Dim.Float_IO/System.Dim.Integer_IO,
    --  the default string parameter must be rewritten to include the dimension
    --  symbols in the output of a dimensioned object.
 
@@ -2175,8 +2175,8 @@ package body Sem_Dim is
 
       function Is_Procedure_Put_Call return Boolean;
       --  Return True if the current call is a call of an instantiation of a
-      --  procedure Put defined in the package System.Dim_Float_IO and
-      --  System.Dim_Integer_IO.
+      --  procedure Put defined in the package System.Dim.Float_IO and
+      --  System.Dim.Integer_IO.
 
       function Item_Actual return Node_Id;
       --  Return the item actual parameter node in the put call
@@ -2240,16 +2240,17 @@ package body Sem_Dim is
             then
                Ent := Cunit_Entity (Get_Source_Unit (Ent));
 
-               --  Verify that the generic package is System.Dim_Float_IO or
-               --  System.Dim_Integer_IO.
+               --  Verify that the generic package is System.Dim.Float_IO or
+               --  System.Dim.Integer_IO.
 
                if Is_Library_Level_Entity (Ent) then
                   Package_Name := Chars (Ent);
 
-                  return
-                    Package_Name = Name_Dim_Float_IO
-                      or else
-                    Package_Name = Name_Dim_Integer_IO;
+                  if Package_Name = Name_Float_IO
+                    or else Package_Name = Name_Integer_IO
+                  then
+                     return Chars (Scope (Ent)) = Name_Dim;
+                  end if;
                end if;
             end if;
          end if;
@@ -2511,11 +2512,13 @@ package body Sem_Dim is
       if Is_Entity_Name (Gen_Id) then
          Ent := Entity (Gen_Id);
 
-         return
-           Is_Library_Level_Entity (Ent)
-             and then
-               (Chars (Ent) = Name_Dim_Float_IO
-                 or else Chars (Ent) = Name_Dim_Integer_IO);
+         if Is_Library_Level_Entity (Ent)
+           and then
+            (Chars (Ent) = Name_Float_IO
+               or else Chars (Ent) = Name_Integer_IO)
+         then
+            return Chars (Scope (Ent)) = Name_Dim;
+         end if;
       end if;
 
       return False;
index 2dce82b03b67fa3f5d2dfcb2981c3d0635ffef98..b32322b902737a068a59f3aa9de3c169c686ed05 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---            Copyright (C) 2011, Free Software Foundation, Inc.            --
+--           Copyright (C) 2011-2012, Free Software Foundation, Inc.        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -27,7 +27,7 @@
 --  "dimension" is a compile-time property of a numerical type which represents
 --  a relation between various quantifiers such as length, velocity, etc.
 
---  Package System.Dim_Mks offers a ready-to-use system of SI base units. In
+--  Package System.Dim.Mks offers a ready-to-use system of SI base units. In
 --  addition, the implementation of this feature offers the ability to define
 --  an arbitrary system of units through the use of Ada 2012 aspects.
 
 --  Phase 2 is called only when the node allows a dimension (see body of
 --  Sem_Dim to get the list of nodes that permit dimensions).
 
-------------------
--- Dimension_IO --
-------------------
-
---  This section contains the routine used for IO purposes
-
 with Types; use Types;
 
 package Sem_Dim is
@@ -145,7 +139,7 @@ package Sem_Dim is
 
    procedure Expand_Put_Call_With_Dimension_Symbol (N : Node_Id);
    --  Determine whether N denotes a subprogram call to one of the routines
-   --  defined in System.Dim_Float_IO or System.Dim_Integer_IO and add an
+   --  defined in System.Dim.Float_IO or System.Dim.Integer_IO and add an
    --  extra actual to the call to represent the symbolic representation of
    --  a dimension.
 
@@ -153,8 +147,8 @@ package Sem_Dim is
    --  Return True if type Typ has aspect Dimension_System applied to it
 
    function Is_Dim_IO_Package_Instantiation (N : Node_Id) return Boolean;
-   --  Return True if N is a package instantiation of System.Dim_Integer_IO or
-   --  of System.Dim_Float_IO.
+   --  Return True if N is a package instantiation of System.Dim.Integer_IO or
+   --  of System.Dim.Float_IO.
 
    procedure Remove_Dimension_In_Call (Call : Node_Id);
    --  Remove the dimensions from all formal parameters of Call
index f8ea812d4eef44c1a2731ee1148aaba13ee903d3..cb5650c80fcd4c7966f9ad56dc86c19560767266 100644 (file)
 with Ada.Unchecked_Conversion;
 with Ada.Unchecked_Deallocation;
 
-with GNAT.Byte_Order_Mark; use GNAT.Byte_Order_Mark;
-
-with Opt;     use Opt;
-with Output;  use Output;
 with Prj.Err;
 with Sinput.C;
 
 with System;
-with System.WCh_Con; use System.WCh_Con;
 
 package body Sinput.P is
 
@@ -169,45 +164,7 @@ package body Sinput.P is
       Prj.Err.Scanner.Set_Special_Character ('#');
       Prj.Err.Scanner.Set_Special_Character ('$');
 
-      --  Check for BOM
-
-      declare
-         BOM : BOM_Kind;
-         Len : Natural;
-         Tst : String (1 .. 5);
-
-      begin
-         for J in 1 .. 5 loop
-            Tst (J) := Source (Scan_Ptr + Source_Ptr (J) - 1);
-         end loop;
-
-         Read_BOM (Tst, Len, BOM, False);
-
-         case BOM is
-            when UTF8_All =>
-               Scan_Ptr := Scan_Ptr + Source_Ptr (Len);
-               Wide_Character_Encoding_Method := WCEM_UTF8;
-               Upper_Half_Encoding := True;
-
-            when UTF16_LE | UTF16_BE =>
-               Set_Standard_Error;
-               Write_Line ("UTF-16 encoding format not recognized");
-               Set_Standard_Output;
-               raise Unrecoverable_Error;
-
-            when UTF32_LE | UTF32_BE =>
-               Set_Standard_Error;
-               Write_Line ("UTF-32 encoding format not recognized");
-               Set_Standard_Output;
-               raise Unrecoverable_Error;
-
-            when Unknown =>
-               null;
-
-            when others =>
-               raise Program_Error;
-         end case;
-      end;
+      Check_For_BOM;
 
       --  We scan past junk to the first interesting compilation unit token, to
       --  see if it is SEPARATE. We ignore WITH keywords during this and also
index 175af07969bec54ce0f12d078684aebbefdb5dfb..b31e041670a912e35fa608394a5762cfa89fd7ab 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -36,11 +36,15 @@ with Atree;    use Atree;
 with Debug;    use Debug;
 with Opt;      use Opt;
 with Output;   use Output;
+with Scans;    use Scans;
 with Tree_IO;  use Tree_IO;
-with System;   use System;
 with Widechar; use Widechar;
 
+with GNAT.Byte_Order_Mark; use GNAT.Byte_Order_Mark;
+
+with System;         use System;
 with System.Memory;
+with System.WCh_Con; use System.WCh_Con;
 
 with Unchecked_Conversion;
 with Unchecked_Deallocation;
@@ -246,6 +250,44 @@ package body Sinput is
       return Name_Buffer (1 .. Name_Len);
    end Build_Location_String;
 
+   procedure Check_For_BOM is
+      BOM : BOM_Kind;
+      Len : Natural;
+      Tst : String (1 .. 5);
+
+   begin
+      for J in 1 .. 5 loop
+         Tst (J) := Source (Scan_Ptr + Source_Ptr (J) - 1);
+      end loop;
+
+      Read_BOM (Tst, Len, BOM, False);
+
+      case BOM is
+         when UTF8_All =>
+            Scan_Ptr := Scan_Ptr + Source_Ptr (Len);
+            Wide_Character_Encoding_Method := WCEM_UTF8;
+            Upper_Half_Encoding := True;
+
+         when UTF16_LE | UTF16_BE =>
+            Set_Standard_Error;
+            Write_Line ("UTF-16 encoding format not recognized");
+            Set_Standard_Output;
+            raise Unrecoverable_Error;
+
+         when UTF32_LE | UTF32_BE =>
+            Set_Standard_Error;
+            Write_Line ("UTF-32 encoding format not recognized");
+            Set_Standard_Output;
+            raise Unrecoverable_Error;
+
+         when Unknown =>
+            null;
+
+         when others =>
+            raise Program_Error;
+      end case;
+   end Check_For_BOM;
+
    -----------------------
    -- Get_Column_Number --
    -----------------------
index 1d13f6e60be3bd6d9246119f65721193daf016bc..816fa72d0947a8a1dcdcedc730398010559ba017 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -712,6 +712,16 @@ package Sinput is
    --  Writes out internal tables to current tree file using the relevant
    --  Table.Tree_Write routines.
 
+   procedure Check_For_BOM;
+   --  Check if the current source starts with a BOM. Scan_Ptr needs to be at
+   --  the start of the current source.
+   --  If the current source starts with a recognized BOM, then some flags
+   --  such as Wide_Character_Encoding_Method are set accordingly.
+   --  An exception is raised if a BOM is found that indicates an unrecognized
+   --  format.
+   --  This procedure has no effect if there is no BOM at the beginning of the
+   --  current source.
+
 private
    pragma Inline (File_Name);
    pragma Inline (First_Mapped_Line);
index 34761f615ac58c91d7c47a963b779edf7cd5d5e5..b1c6a2d80b01244a32b131bb63acaf212b8c73e1 100644 (file)
@@ -225,8 +225,7 @@ package Snames is
    --  Names used by the analyzer and expander for aspect Dimension and
    --  Dimension_System to deal with Sqrt and IO routines.
 
-   Name_Dim_Float_IO                 : constant Name_Id := N + $; -- Ada 12
-   Name_Dim_Integer_IO               : constant Name_Id := N + $; -- Ada 12
+   Name_Dim                          : constant Name_Id := N + $; -- Ada 12
    Name_Generic_Elementary_Functions : constant Name_Id := N + $; -- Ada 12
    Name_Item                         : constant Name_Id := N + $; -- Ada 12
    Name_Sqrt                         : constant Name_Id := N + $; -- Ada 12