home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / debug.adb < prev    next >
Text File  |  1996-09-28  |  14KB  |  310 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                D E B U G                                 --
  6. --                                                                          --
  7. --                                 B o d y                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.34 $                             --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. package body Debug is
  27.  
  28.    ---------------------------------
  29.    -- Summary of Debug Flag Usage --
  30.    ---------------------------------
  31.  
  32.    --  Debug flags for compiler (and front end)
  33.  
  34.    --  da   Generate messages tracking semantic analyzer progress
  35.    --  db
  36.    --  dc   List names of units as they are compiled
  37.    --  dd   Dynamic allocation of tables messages generated
  38.    --  de   List the entity table
  39.    --  df   Full tree/source print (includes withed units)
  40.    --  dg   Print source from tree (generated code only)
  41.    --  dh   Generate listing showing loading of name table hash chains
  42.    --  di   Generate messages for visibility linking/delinking
  43.    --  dj   Juxtapose itype declarations in listed source
  44.    --  dk   Generate GNATBUG message on abort, even if previous errors
  45.    --  dl   Generate unit load trace messages
  46.    --  dm
  47.    --  dn   Generate messages for node/list allocation
  48.    --  do   Print source from tree (original code only)
  49.    --  dp   Generate messages for parser scope stack push/pops
  50.    --  dq
  51.    --  dr   Generate parser resynchronization messages
  52.    --  ds   Print source from tree (including original and generated stuff)
  53.    --  dt   Print full tree
  54.    --  du   Uncheck distribution pragmas
  55.    --  dv   Output trace of overload resolution
  56.    --  dw   Write semantic scope stack error messages
  57.    --  dx   Force expansion on, even if no code being generated
  58.    --  dy   Print tree of package Standard
  59.    --  dz   Print source of package Standard
  60.  
  61.    --  d1   Error msgs have node numbers where possible
  62.    --  d2   Eliminate error flags in verbose form error messages
  63.    --  d3   Dump bad node in Comperr on an abort
  64.    --  d4   Inhibit automatic krunch of predefined library unit files
  65.    --  d5   Debug output for tree read/write
  66.    --  d6
  67.    --  d7
  68.    --  d8
  69.    --  d9
  70.  
  71.    --  Debug flags for binder
  72.  
  73.    --  da
  74.    --  db
  75.    --  dc  List units as they are chosen
  76.    --  dd
  77.    --  de
  78.    --  df
  79.    --  dg
  80.    --  dh
  81.    --  di
  82.    --  dj
  83.    --  dk
  84.    --  dl
  85.    --  dm
  86.    --  dn  List details of manipulation of Num_Pred values
  87.    --  do
  88.    --  dp
  89.    --  dq
  90.    --  dr
  91.    --  ds
  92.    --  dt
  93.    --  du
  94.    --  dv
  95.    --  dw
  96.    --  dx
  97.    --  dy
  98.    --  dz
  99.  
  100.    --  d1
  101.    --  d2
  102.    --  d3
  103.    --  d4
  104.    --  d5
  105.    --  d6
  106.    --  d7
  107.    --  d8
  108.    --  d9
  109.  
  110.    --------------------------------------------
  111.    -- Documentation for Compiler Debug Flags --
  112.    --------------------------------------------
  113.  
  114.    --  da   Generate messages tracking semantic analyzer progress. A message
  115.    --       is output showing each node as it gets analyzed, expanded,
  116.    --       resolved, or evaluated. This option is useful for finding out
  117.    --       exactly where a bomb during semantic analysis is occurring.
  118.  
  119.    --  dc   List names of units as they are compiled. One line of output will
  120.    --       be generated at the start of compiling each unit (package or
  121.    --       subprogram).
  122.  
  123.    --  dd   Dynamic allocation of tables messages generated. Each time a
  124.    --       table is reallocated, a line is output indicating the expansion.
  125.  
  126.    --  de   List the entity table
  127.  
  128.    --  df   Full tree/source print (includes withed units). Normally the tree
  129.    --       output (dt) or recreated source output (dg,do,ds) includes only
  130.    --       the main unit. If df is set, then the output in either case
  131.    --       includes all compiled units (see also dg,do,ds,dt). Note that to
  132.    --       be effective, this swich must be used in combination with one or
  133.    --       more of dt, dg, do or ds.
  134.  
  135.    --  dg   Print the source recreated from the generated tree. In the case
  136.    --       where the tree has been rewritten this output includes only the
  137.    --       generated code, not the original code (see also df,do,ds,dz).
  138.  
  139.    --  dh   Generates a table at the end of a compilation showing how the hash
  140.    --       table chains built by the Namet package are loaded. This is useful
  141.    --       in ensuring that the hashing algorithm (in Namet.Hash) is working
  142.    --       effectively with typical sets of program identifiers.
  143.  
  144.    --  di   Generate messages for visibility linking/delinking
  145.  
  146.    --  dj   Normally the generated source listing does not include itypes,
  147.    --       since they greatly confuse the listing. This debug switch causes
  148.    --       the itypes to be listed right next ("juxtaposed") to the construct
  149.    --       to which the itype is attached.
  150.  
  151.    --  dk   Immediate kill on abort. Normally on an abort (i.e. a call to
  152.    --       Comperr.Compiler_Abort), the GNATBUG message is not given if
  153.    --       there is a previous error. This debug switch bypasses this test
  154.    --       and gives the message unconditionally (useful for debugging).
  155.  
  156.    --  dl   Generate unit load trace messages. A line of traceback output is
  157.    --       generated each time a request is made to the library manager to
  158.    --       load a new unit.
  159.  
  160.    --  dn   Generate messages for node/list allocation. Each time a node or
  161.    --       list header is allocated, a line of output is generated. Certain
  162.    --       other basic tree operations also cause a line of output to be
  163.    --       generated. This option is useful in seeing where the parser is
  164.    --       blowing up.;
  165.  
  166.    --  do   Print the source recreated from the generated tree. In the case
  167.    --       where the tree has been rewritten, this output includes only the
  168.    --       original code, not the generated code (see also df,dg,ds,dz).
  169.  
  170.    --  dp   Generate messages for parser scope stack push/pops. A line of
  171.    --       output by the parser each time the parser scope stack is either
  172.    --       pushed or popped. Useful in debugging situations where the
  173.    --       parser scope stack ends up incorrectly synchronized
  174.  
  175.    --  dr   Generate parser resynchronization messages. Normally the parser
  176.    --       resynchronizes quietly. With this debug option, two messages
  177.    --       are generated, one when the parser starts a resynchronization
  178.    --       skip, and another when it resumes parsing. Useful in debugging
  179.    --       inadequate error recovery situations.
  180.  
  181.    --  ds   Print the source recreated from the generated tree. In the case
  182.    --       where the tree has been rewritten this output includes both the
  183.    --       generated code and the original code with the generated code
  184.    --       being enlosed in curly brackets (see also df,do,ds,dz)
  185.  
  186.    --  dt   Print full tree. The generated tree is output (see also df,dy)
  187.  
  188.    --  du   Uncheck categorization pragmas. This debug switch causes the
  189.    --       categorization pragmas (Pure, Preelaborate etc) to be ignored
  190.    --       so that normal checks are not made (this is particularly useful
  191.    --       for adding temporary debugging code to units that have pragmas
  192.    --       that are inconsistent with the debugging code added.
  193.  
  194.    --  dw   Write semantic scope stack messages. Each time a scope is created
  195.    --       or removed, a message is output (see the Sem_Ch8.New_Scope and
  196.    --       Sem_Ch8.Pop_Scope subprograms).
  197.  
  198.    --  dx   Force expansion on, even if no code being generated. Normally the
  199.    --       expander is inhibited if no code is generated. This switch forces
  200.    --       expansion to proceed normally even if the backend is not being
  201.    --       called. This is particularly useful for debugging purposes when
  202.    --       using the front-end only version of the compiler (which normally
  203.    --       would never do any expansion).
  204.  
  205.    --  dy   Print tree of package Standard. Normally the tree print out does
  206.    --       not include package Standard, even if the -df switch is set. This
  207.    --       switch forces output of the internal tree built for Standard.
  208.  
  209.    --  dz   Print source of package Standard. Normally the source print out
  210.    --       does not include package Standard, even if the -df switch is set.
  211.    --       This switch forces output of the source recreated from the internal
  212.    --       tree built for Standard.
  213.  
  214.    --  d1   Error msgs have node numbers where possible. Normally error
  215.    --       messages have only source locations. This option is useful when
  216.    --       debugging errors caused by expanded code, where the source location
  217.    --       does not give enough information.
  218.  
  219.    --  d2   Suppress output of the error position flags for verbose form error
  220.    --       messages. The messages are still interspersed in the listing, but
  221.    --       without any error flags or extra blank lines. Also causes an extra
  222.    --       <<< to be output at the right margin. This is intended to be the
  223.    --       easiest format for checking conformance of ACVC B tests.
  224.  
  225.    --  d3   Causes Comperr to dump the contents of the node for which an abort
  226.    --       was detected (normally only the Node_Id of the node is output).
  227.  
  228.    --  d4   Inhibits automatic krunching of predefined library unit file names.
  229.    --       Normally, as described in the spec of package Krunch, such files
  230.    --       are automatically krunched to 8 characters, with special treatment
  231.    --       of the prefixes Ada, System, and Interfaces. Setting this debug
  232.    --       switch disables this special treatment.
  233.  
  234.    ------------------------------------------
  235.    -- Documentation for Binder Debug Flags --
  236.    ------------------------------------------
  237.  
  238.    --  dc  List units as they are chosen. As units are selected for addition to
  239.    --      the elaboration order, a line of output is generated showing which
  240.    --      unit has been selected.
  241.  
  242.    --  dn  List details of manipulation of Num_Pred values during execution of
  243.    --      the algorithm used to determine a correct order of elaboration. This
  244.    --      is useful in diagnosing any problems in its behavior.
  245.  
  246.    ----------------------
  247.    -- Get_Debug_Flag_K --
  248.    ----------------------
  249.  
  250.    function Get_Debug_Flag_K return Boolean is
  251.    begin
  252.       return Debug_Flag_K;
  253.    end Get_Debug_Flag_K;
  254.  
  255.    --------------------
  256.    -- Set_Debug_Flag --
  257.    --------------------
  258.  
  259.    procedure Set_Debug_Flag (C : Character; Val : Boolean := True) is
  260.       subtype Dig is Character range '1' .. '9';
  261.       subtype Let is Character range 'a' .. 'z';
  262.  
  263.    begin
  264.       if C in Dig then
  265.          case Dig (C) is
  266.             when '1' => Debug_Flag_1 := Val;
  267.             when '2' => Debug_Flag_2 := Val;
  268.             when '3' => Debug_Flag_3 := Val;
  269.             when '4' => Debug_Flag_4 := Val;
  270.             when '5' => Debug_Flag_5 := Val;
  271.             when '6' => Debug_Flag_6 := Val;
  272.             when '7' => Debug_Flag_7 := Val;
  273.             when '8' => Debug_Flag_8 := Val;
  274.             when '9' => Debug_Flag_9 := Val;
  275.          end case;
  276.  
  277.       else
  278.          case Let (C) is
  279.             when 'a' => Debug_Flag_A := Val;
  280.             when 'b' => Debug_Flag_B := Val;
  281.             when 'c' => Debug_Flag_C := Val;
  282.             when 'd' => Debug_Flag_D := Val;
  283.             when 'e' => Debug_Flag_E := Val;
  284.             when 'f' => Debug_Flag_F := Val;
  285.             when 'g' => Debug_Flag_G := Val;
  286.             when 'h' => Debug_Flag_H := Val;
  287.             when 'i' => Debug_Flag_I := Val;
  288.             when 'j' => Debug_Flag_J := Val;
  289.             when 'k' => Debug_Flag_K := Val;
  290.             when 'l' => Debug_Flag_L := Val;
  291.             when 'm' => Debug_Flag_M := Val;
  292.             when 'n' => Debug_Flag_N := Val;
  293.             when 'o' => Debug_Flag_O := Val;
  294.             when 'p' => Debug_Flag_P := Val;
  295.             when 'q' => Debug_Flag_Q := Val;
  296.             when 'r' => Debug_Flag_R := Val;
  297.             when 's' => Debug_Flag_S := Val;
  298.             when 't' => Debug_Flag_T := Val;
  299.             when 'u' => Debug_Flag_U := Val;
  300.             when 'v' => Debug_Flag_V := Val;
  301.             when 'w' => Debug_Flag_W := Val;
  302.             when 'x' => Debug_Flag_X := Val;
  303.             when 'y' => Debug_Flag_Y := Val;
  304.             when 'z' => Debug_Flag_Z := Val;
  305.          end case;
  306.       end if;
  307.    end Set_Debug_Flag;
  308.  
  309. end Debug;
  310.