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 / snames.adb < prev    next >
Text File  |  1996-09-28  |  19KB  |  670 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                               S N A M E S                                --
  6. --                                                                          --
  7. --                                 B o d y                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.112 $                            --
  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. with Namet; use Namet;
  27.  
  28. package body Snames is
  29.  
  30.    --  Table of names to be set by Initialize. Each name is terminated by a
  31.    --  single #, and the end of the list is marked by a null entry, i.e. by
  32.    --  two # marks in succession. Note that the table does not include the
  33.    --  entries for a-z, since these are initialized by Namet itself.
  34.  
  35.    Preset_Names : constant String :=
  36.      "_abort_signal#" &
  37.      "_assign#" &
  38.      "_chain#" &
  39.      "_clean#" &
  40.      "_controller#" &
  41.      "_entry_bodies#" &
  42.      "_expunge#" &
  43.      "_final_list#" &
  44.      "_idepth#" &
  45.      "_init#" &
  46.      "_local_final_list#" &
  47.      "_master#" &
  48.      "_object#" &
  49.      "_parent#" &
  50.      "_priority#" &
  51.      "_service#" &
  52.      "_size#" &
  53.      "_tag#" &
  54.      "_tags#" &
  55.      "_task#" &
  56.      "_task_id#" &
  57.      "_trace_sp#" &
  58.      "initialize#" &
  59.      "adjust#" &
  60.      "finalize#" &
  61.      "next#" &
  62.      "prev#" &
  63.      "_deep_adjust#" &
  64.      "_equality#" &
  65.      "_deep_finalize#" &
  66.      "_deep_initialize#" &
  67.      "_init_proc#" &
  68.      "_input#" &
  69.      "_output#" &
  70.      "_read#" &
  71.      "_rep_to_pos#" &
  72.      "_write#" &
  73.      "allocate#" &
  74.      "deallocate#" &
  75.      "decimal_io#" &
  76.      "enumeration_io#" &
  77.      "fixed_io#" &
  78.      "float_io#" &
  79.      "integer_io#" &
  80.      "modular_io#" &
  81.      "a_textio#" &
  82.      "a_witeio#" &
  83.      "const#" &
  84.      "<error>#" &
  85.      "go#" &
  86.      "put#" &
  87.      "put_line#" &
  88.      "to#" &
  89.      "finalization#" &
  90.      "finalization_implementation#" &
  91.      "interfaces#" &
  92.      "standard#" &
  93.      "system#" &
  94.      "ast_receiver#" &
  95.      "do_rpc#" &
  96.      "do_apc#" &
  97.      "exception_identity#" &
  98.      "exceptions#" &
  99.      "exception_occurrence#" &
  100.      "get_local_partition_id#" &
  101.      "null_id#" &
  102.      "params#" &
  103.      "params_stream_type#" &
  104.      "partition_interface#" &
  105.      "pid#" &
  106.      "pointer#" &
  107.      "result#" &
  108.      "rpc#" &
  109.      "rpc_receiver#" &
  110.      "stream_element_offset#" &
  111.      "streams#" &
  112.      "Oabs#" &
  113.      "Oand#" &
  114.      "Omod#" &
  115.      "Onot#" &
  116.      "Oor#" &
  117.      "Orem#" &
  118.      "Oxor#" &
  119.      "Oeq#" &
  120.      "One#" &
  121.      "Olt#" &
  122.      "Ole#" &
  123.      "Ogt#" &
  124.      "Oge#" &
  125.      "Oadd#" &
  126.      "Osubtract#" &
  127.      "Oconcat#" &
  128.      "Omultiply#" &
  129.      "Odivide#" &
  130.      "Oexpon#" &
  131.      "abort_defer#" &
  132.      "ada_83#" &
  133.      "ada_95#" &
  134.      "all_calls_remote#" &
  135.      "annotate#" &
  136.      "assert#" &
  137.      "asynchronous#" &
  138.      "atomic#" &
  139.      "atomic_components#" &
  140.      "attach_handler#" &
  141.      "controlled#" &
  142.      "convention#" &
  143.      "cpp_class#" &
  144.      "cpp_constructor#" &
  145.      "cpp_destructor#" &
  146.      "cpp_virtual#" &
  147.      "cpp_vtable#" &
  148.      "debug#" &
  149.      "discard_names#" &
  150.      "elaborate#" &
  151.      "elaborate_all#" &
  152.      "elaborate_body#" &
  153.      "error_monitoring#" &
  154.      "export#" &
  155.      "import#" &
  156.      "inline#" &
  157.      "inspection_point#" &
  158.      "interface#" &
  159.      "interface_name#" &
  160.      "interrupt_handler#" &
  161.      "interrupt_priority#" &
  162.      "linker_options#" &
  163.      "list#" &
  164.      "locking_policy#" &
  165.      "machine_attribute#" &
  166.      "memory_size#" &
  167.      "normalize_scalars#" &
  168.      "optimize#" &
  169.      "pack#" &
  170.      "page#" &
  171.      "preelaborate#" &
  172.      "priority#" &
  173.      "pure#" &
  174.      "queuing_policy#" &
  175.      "remote_call_interface#" &
  176.      "remote_types#" &
  177.      "restrictions#" &
  178.      "reviewable#" &
  179.      "shared#" &
  180.      "shared_passive#" &
  181.      "source_reference#" &
  182.      "suppress#" &
  183.      "system_name#" &
  184.      "task_dispatching_policy#" &
  185.      "unimplemented_unit#" &
  186.      "unsuppress#" &
  187.      "volatile#" &
  188.      "volatile_components#" &
  189.      "ada#" &
  190.      "asm#" &
  191.      "assembler#" &
  192.      "cobol#" &
  193.      "cpp#" &
  194.      "fortran#" &
  195.      "intrinsic#" &
  196.      "stdcall#" &
  197.      "attribute_name#" &
  198.      "component#" &
  199.      "entity#" &
  200.      "entry_count#" &
  201.      "external_name#" &
  202.      "gcc#" &
  203.      "gnat#" &
  204.      "link_name#" &
  205.      "off#" &
  206.      "on#" &
  207.      "space#" &
  208.      "time#" &
  209.      "vtable_ptr#" &
  210.      "abort_signal#" &
  211.      "access#" &
  212.      "address#" &
  213.      "address_size#" &
  214.      "adjacent#" &
  215.      "aft#" &
  216.      "alignment#" &
  217.      "bit_order#" &
  218.      "body_version#" &
  219.      "callable#" &
  220.      "caller#" &
  221.      "ceiling#" &
  222.      "component_size#" &
  223.      "compose#" &
  224.      "constrained#" &
  225.      "copy_sign#" &
  226.      "count#" &
  227.      "default_bit_order#" &
  228.      "definite#" &
  229.      "delta#" &
  230.      "denorm#" &
  231.      "digits#" &
  232.      "emax#" &
  233.      "enum_rep#" &
  234.      "epsilon#" &
  235.      "exponent#" &
  236.      "external_tag#" &
  237.      "first#" &
  238.      "first_bit#" &
  239.      "fixed_value#" &
  240.      "floor#" &
  241.      "fore#" &
  242.      "fraction#" &
  243.      "identity#" &
  244.      "image#" &
  245.      "img#" &
  246.      "input#" &
  247.      "integer_value#" &
  248.      "large#" &
  249.      "last#" &
  250.      "last_bit#" &
  251.      "leading_part#" &
  252.      "length#" &
  253.      "machine#" &
  254.      "machine_emax#" &
  255.      "machine_emin#" &
  256.      "machine_mantissa#" &
  257.      "machine_overflows#" &
  258.      "machine_radix#" &
  259.      "machine_rounds#" &
  260.      "mantissa#" &
  261.      "max#" &
  262.      "max_interrupt_priority#" &
  263.      "max_priority#" &
  264.      "max_size_in_storage_elements#" &
  265.      "maximum_alignment#" &
  266.      "min#" &
  267.      "model#" &
  268.      "model_emin#" &
  269.      "model_epsilon#" &
  270.      "model_mantissa#" &
  271.      "model_small#" &
  272.      "modulus#" &
  273.      "output#" &
  274.      "partition_id#" &
  275.      "passed_by_reference#" &
  276.      "pos#" &
  277.      "position#" &
  278.      "pred#" &
  279.      "range#" &
  280.      "range_length#" &
  281.      "read#" &
  282.      "remainder#" &
  283.      "round#" &
  284.      "rounding#" &
  285.      "safe_emax#" &
  286.      "safe_first#" &
  287.      "safe_large#" &
  288.      "safe_last#" &
  289.      "safe_small#" &
  290.      "scale#" &
  291.      "scaling#" &
  292.      "signed_zeros#" &
  293.      "size#" &
  294.      "small#" &
  295.      "storage_size#" &
  296.      "storage_unit#" &
  297.      "succ#" &
  298.      "tag#" &
  299.      "terminated#" &
  300.      "tick#" &
  301.      "truncation#" &
  302.      "unbiased_rounding#" &
  303.      "unchecked_access#" &
  304.      "universal_literal_string#" &
  305.      "unrestricted_access#" &
  306.      "val#" &
  307.      "valid#" &
  308.      "value#" &
  309.      "version#" &
  310.      "wide_image#" &
  311.      "wide_value#" &
  312.      "wide_width#" &
  313.      "width#" &
  314.      "word_size#" &
  315.      "write#" &
  316.      "elab_body#" &
  317.      "elab_spec#" &
  318.      "storage_pool#" &
  319.      "base#" &
  320.      "class#" &
  321.      "ceiling_locking#" &
  322.      "fifo_queuing#" &
  323.      "priority_queuing#" &
  324.      "fifo_within_priorities#" &
  325.      "access_check#" &
  326.      "accessibility_check#" &
  327.      "discriminant_check#" &
  328.      "division_check#" &
  329.      "elaboration_check#" &
  330.      "index_check#" &
  331.      "length_check#" &
  332.      "overflow_check#" &
  333.      "range_check#" &
  334.      "storage_check#" &
  335.      "tag_check#" &
  336.      "all_checks#" &
  337.      "abort#" &
  338.      "abs#" &
  339.      "abstract#" &
  340.      "accept#" &
  341.      "and#" &
  342.      "all#" &
  343.      "array#" &
  344.      "at#" &
  345.      "begin#" &
  346.      "body#" &
  347.      "case#" &
  348.      "constant#" &
  349.      "declare#" &
  350.      "delay#" &
  351.      "do#" &
  352.      "else#" &
  353.      "elsif#" &
  354.      "end#" &
  355.      "entry#" &
  356.      "exception#" &
  357.      "exit#" &
  358.      "for#" &
  359.      "function#" &
  360.      "generic#" &
  361.      "goto#" &
  362.      "if#" &
  363.      "in#" &
  364.      "is#" &
  365.      "limited#" &
  366.      "loop#" &
  367.      "mod#" &
  368.      "new#" &
  369.      "not#" &
  370.      "null#" &
  371.      "of#" &
  372.      "or#" &
  373.      "others#" &
  374.      "out#" &
  375.      "package#" &
  376.      "pragma#" &
  377.      "private#" &
  378.      "procedure#" &
  379.      "raise#" &
  380.      "record#" &
  381.      "rem#" &
  382.      "renames#" &
  383.      "return#" &
  384.      "reverse#" &
  385.      "select#" &
  386.      "separate#" &
  387.      "subtype#" &
  388.      "task#" &
  389.      "terminate#" &
  390.      "then#" &
  391.      "type#" &
  392.      "use#" &
  393.      "when#" &
  394.      "while#" &
  395.      "with#" &
  396.      "xor#" &
  397.      "divide#" &
  398.      "rotate_left#" &
  399.      "rotate_right#" &
  400.      "shift_left#" &
  401.      "shift_right#" &
  402.      "shift_right_arithmetic#" &
  403.      "unchecked_conversion#" &
  404.      "unchecked_deallocation#" &
  405.      "aliased#" &
  406.      "protected#" &
  407.      "until#" &
  408.      "requeue#" &
  409.      "tagged#" &
  410.       "#";
  411.  
  412.    ---------------------
  413.    -- Generated Names --
  414.    ---------------------
  415.  
  416.    --  This section lists the various cases of generated names which are
  417.    --  built from existing names by adding unique leading and/or trailing
  418.    --  upper case letters. In some cases these names are built recursively,
  419.    --  in particular names built from types may be built from types which
  420.    --  themselves have generated names. In this list, xxx represents an
  421.    --  existing name to which identifying letters are prepended or appended,
  422.    --  and a trailing n represents a serial number in an external name that
  423.    --  has some semantic significance (e.g. the n'th index type of an array).
  424.  
  425.    --    xxxA    access type for formal xxx in entry param record   (Exp_Ch9)
  426.    --    xxxB    tag table for tagged type xxx                      (Exp_Ch3)
  427.    --    xxxB    task body procedure for task xxx                   (Exp_Ch9)
  428.    --    xxxD    dispatch table for tagged type xxx                 (Exp_Ch3)
  429.    --    xxxD    discriminal for discriminant xxx                   (Sem_Ch3)
  430.    --    xxxDn   n'th discr check function for rec type xxx         (Exp_Ch3)
  431.    --    xxxE    elaboration boolean flag for task xxx              (Exp_Ch9)
  432.    --    xxxE    dispatch table pointer type for tagged type xxx    (Exp_Ch3)
  433.    --    xxxE    parameters for accept body for entry xxx           (Exp_Ch9)
  434.    --    xxxFn   n'th primitive of a tagged type (named xxx)        (Exp_Ch3)
  435.    --    xxxI    initialization procedure for type xxx              (Exp_Ch3)
  436.    --    xxxJ    tag table type index for tagged type xxx           (Exp_Ch3)
  437.    --    xxxM    master Id value for access type xxx                (Exp_Ch3)
  438.    --    xxxP    tag table pointer type for tagged type xxx         (Exp_Ch3)
  439.    --    xxxP    parameter record type for entry xxx                (Exp_Ch9)
  440.    --    xxxPA   access to parameter record type for entry xxx      (Exp_Ch9)
  441.    --    xxxPn   pointer type for n'th primitive of tagged type xxx (Exp_Ch3)
  442.    --    xxxR    dispatch table pointer for tagged type xxx         (Exp_Ch3)
  443.    --    xxxT    tag table type for tagged type xxx                 (Exp_Ch3)
  444.    --    xxxT    literal table for enumeration type xxx             (Sem_Ch3)
  445.    --    xxxV    type for task value record for task xxx            (Exp_Ch9)
  446.    --    xxxX    entry index constant                               (Exp_Ch9)
  447.    --    xxxY    dispatch table type for tagged type xxx            (Exp_Ch3)
  448.    --    xxxZ    size variable for task xxx                         (Exp_Ch9)
  449.  
  450.    --  Implicit type names
  451.  
  452.    --    TxxxT   type of literal table for enumeration type xxx     (Sem_Ch3)
  453.  
  454.    --  (list not yet complete ???)
  455.  
  456.    ----------------------
  457.    -- Get_Attribute_Id --
  458.    ----------------------
  459.  
  460.    function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
  461.    begin
  462.       return Attribute_Id'Val (N - First_Attribute_Name);
  463.    end Get_Attribute_Id;
  464.  
  465.    ------------------
  466.    -- Get_Check_Id --
  467.    ------------------
  468.  
  469.    function Get_Check_Id (N : Name_Id) return Check_Id is
  470.    begin
  471.       return Check_Id'Val (N - First_Check_Name);
  472.    end Get_Check_Id;
  473.  
  474.    -----------------------
  475.    -- Get_Convention_Id --
  476.    -----------------------
  477.  
  478.    function Get_Convention_Id (N : Name_Id) return Convention_Id is
  479.    begin
  480.       case N is
  481.          when Name_Ada        => return Convention_Ada;
  482.          when Name_Asm        => return Convention_Assembler;
  483.          when Name_Assembler  => return Convention_Assembler;
  484.          when Name_C          => return Convention_C;
  485.          when Name_COBOL      => return Convention_COBOL;
  486.          when Name_CPP        => return Convention_CPP;
  487.          when Name_Fortran    => return Convention_Fortran;
  488.          when Name_Intrinsic  => return Convention_Intrinsic;
  489.          when Name_Stdcall    => return Convention_Stdcall;
  490.          when others          => pragma Assert (False); null;
  491.       end case;
  492.    end Get_Convention_Id;
  493.  
  494.    ---------------------------
  495.    -- Get_Locking_Policy_Id --
  496.    ---------------------------
  497.  
  498.    function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id is
  499.    begin
  500.       return Locking_Policy_Id'Val (N - First_Locking_Policy_Name);
  501.    end Get_Locking_Policy_Id;
  502.  
  503.    -------------------
  504.    -- Get_Pragma_Id --
  505.    -------------------
  506.  
  507.    function Get_Pragma_Id (N : Name_Id) return Pragma_Id is
  508.    begin
  509.       if N = Name_Storage_Size then
  510.          return Pragma_Storage_Size;
  511.       elsif N = Name_Storage_Unit then
  512.          return Pragma_Storage_Unit;
  513.       else
  514.          return Pragma_Id'Val (N - First_Pragma_Name);
  515.       end if;
  516.    end Get_Pragma_Id;
  517.  
  518.    ---------------------------
  519.    -- Get_Queuing_Policy_Id --
  520.    ---------------------------
  521.  
  522.    function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id is
  523.    begin
  524.       return Queuing_Policy_Id'Val (N - First_Queuing_Policy_Name);
  525.    end Get_Queuing_Policy_Id;
  526.  
  527.    ------------------------------------
  528.    -- Get_Task_Dispatching_Policy_Id --
  529.    ------------------------------------
  530.  
  531.    function Get_Task_Dispatching_Policy_Id (N : Name_Id)
  532.      return Task_Dispatching_Policy_Id is
  533.    begin
  534.       return Task_Dispatching_Policy_Id'Val
  535.         (N - First_Task_Dispatching_Policy_Name);
  536.    end Get_Task_Dispatching_Policy_Id;
  537.  
  538.    ----------------
  539.    -- Initialize --
  540.    ----------------
  541.  
  542.    procedure Initialize is
  543.       P_Index      : Natural;
  544.       Discard_Name : Name_Id;
  545.  
  546.    begin
  547.       P_Index := Preset_Names'First;
  548.  
  549.       loop
  550.          Name_Len := 0;
  551.  
  552.          while Preset_Names (P_Index) /= '#' loop
  553.             Name_Len := Name_Len + 1;
  554.             Name_Buffer (Name_Len) := Preset_Names (P_Index);
  555.             P_Index := P_Index + 1;
  556.          end loop;
  557.  
  558.          --  We do the Name_Find call to enter the name into the table, but
  559.          --  we don't need to do anything with the result, since we already
  560.          --  initialized all the preset names to have the right value (we
  561.          --  are depending on the order of the names and Preset_Names).
  562.  
  563.          Discard_Name := Name_Find;
  564.          P_Index := P_Index + 1;
  565.          exit when Preset_Names (P_Index) = '#';
  566.       end loop;
  567.  
  568.       --  Make sure that number of names in standard table is correct. If
  569.       --  this check fails, run utility program XSNAMES to construct a new
  570.       --  properly matching version of the body.
  571.  
  572.       pragma Assert (Discard_Name = Last_Predefined_Name);
  573.    end Initialize;
  574.  
  575.    -----------------------
  576.    -- Is_Attribute_Name --
  577.    -----------------------
  578.  
  579.    function Is_Attribute_Name (N : Name_Id) return Boolean is
  580.    begin
  581.       return N in First_Attribute_Name .. Last_Attribute_Name;
  582.    end Is_Attribute_Name;
  583.  
  584.    ------------------------------
  585.    -- Is_Entity_Attribute_Name --
  586.    ------------------------------
  587.  
  588.    function Is_Entity_Attribute_Name (N : Name_Id) return Boolean is
  589.    begin
  590.       return N in First_Entity_Attribute_Name .. Last_Entity_Attribute_Name;
  591.    end Is_Entity_Attribute_Name;
  592.  
  593.    ----------------------------
  594.    -- Is_Type_Attribute_Name --
  595.    ----------------------------
  596.  
  597.    function Is_Type_Attribute_Name (N : Name_Id) return Boolean is
  598.    begin
  599.       return N in First_Type_Attribute_Name .. Last_Type_Attribute_Name;
  600.    end Is_Type_Attribute_Name;
  601.  
  602.    -------------------
  603.    -- Is_Check_Name --
  604.    -------------------
  605.  
  606.    function Is_Check_Name (N : Name_Id) return Boolean is
  607.    begin
  608.       return N in First_Check_Name .. Last_Check_Name;
  609.    end Is_Check_Name;
  610.  
  611.    ------------------------
  612.    -- Is_Convention_Name --
  613.    ------------------------
  614.  
  615.    function Is_Convention_Name (N : Name_Id) return Boolean is
  616.    begin
  617.       return N in First_Convention_Name .. Last_Convention_Name
  618.         or else N = Name_C;
  619.    end Is_Convention_Name;
  620.  
  621.    ----------------------------
  622.    -- Is_Locking_Policy_Name --
  623.    ----------------------------
  624.  
  625.    function Is_Locking_Policy_Name (N : Name_Id) return Boolean is
  626.    begin
  627.       return N in First_Locking_Policy_Name .. Last_Locking_Policy_Name;
  628.    end Is_Locking_Policy_Name;
  629.  
  630.    -----------------------------
  631.    -- Is_Operator_Symbol_Name --
  632.    -----------------------------
  633.  
  634.    function Is_Operator_Symbol_Name (N : Name_Id) return Boolean is
  635.    begin
  636.       return N in First_Operator_Name .. Last_Operator_Name;
  637.    end Is_Operator_Symbol_Name;
  638.  
  639.    --------------------
  640.    -- Is_Pragma_Name --
  641.    --------------------
  642.  
  643.    function Is_Pragma_Name (N : Name_Id) return Boolean is
  644.    begin
  645.       return N in First_Pragma_Name .. Last_Pragma_Name
  646.         or else N = Name_Storage_Size
  647.         or else N = Name_Storage_Unit;
  648.    end Is_Pragma_Name;
  649.  
  650.    ----------------------------
  651.    -- Is_Queuing_Policy_Name --
  652.    ----------------------------
  653.  
  654.    function Is_Queuing_Policy_Name (N : Name_Id) return Boolean is
  655.    begin
  656.       return N in First_Queuing_Policy_Name .. Last_Queuing_Policy_Name;
  657.    end Is_Queuing_Policy_Name;
  658.  
  659.    -------------------------------------
  660.    -- Is_Task_Dispatching_Policy_Name --
  661.    -------------------------------------
  662.  
  663.    function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean is
  664.    begin
  665.       return N in First_Task_Dispatching_Policy_Name ..
  666.                   Last_Task_Dispatching_Policy_Name;
  667.    end Is_Task_Dispatching_Policy_Name;
  668.  
  669. end Snames;
  670.