diff options
author | Bob Duff <duff@adacore.com> | 2021-02-03 05:31:16 -0500 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-05-07 05:29:09 -0400 |
commit | 76f9c7f44fffb0b03266730b137313fe79f1c99e (patch) | |
tree | 8c77fa6bd5661f0ffb427f7003a21b9a46dc30d6 /gcc/ada/xsinfo.adb | |
parent | 476ed6bf66ab20e22ae4b3da0fd7fd94753f2334 (diff) | |
download | gcc-76f9c7f44fffb0b03266730b137313fe79f1c99e.zip gcc-76f9c7f44fffb0b03266730b137313fe79f1c99e.tar.gz gcc-76f9c7f44fffb0b03266730b137313fe79f1c99e.tar.bz2 |
[Ada] Variable-sized node types
gcc/ada/
* atree.ads, atree.adb: Major rewrite to support variable-sized
node types. Add pragmas Suppress and Assertion_Policy. We now
have an extra level of indirection: Node_Offsets is a table
mapping Node_Ids to the offset of the start of each node in
Slots. Slots is a table containing one or more contiguous slots
for each node. Each slot is a 32-bit unchecked union that can
contain any mixture of 1, 2, 4, 8, and 32-bit fields that fits.
The old low-level getters and setters (e.g. Flag123) are
removed.
* gen_il-fields.ads, gen_il-gen-gen_entities.adb,
gen_il-gen-gen_nodes.adb, gen_il-gen.adb, gen_il-gen.ads,
gen_il-main.adb, gen_il-types.ads, gen_il-utils.adb,
gen_il-utils.ads, gen_il.adb, gen_il.ads: New gen_il program
that generates various Ada and C++ files. In particular, the
following files are generated by gen_il: einfo-entities.adb
einfo-entities.ads, gnatvsn.ads, nmake.adb, nmake.ads,
seinfo.ads, seinfo_tables.adb, seinfo_tables.ads,
sinfo-nodes.adb, sinfo-nodes.ads, einfo.h, and sinfo.h.
* sinfo-utils.adb, sinfo-utils.ads, einfo-utils.adb,
einfo-utils.ads: New files containing code that needs to refer
to Sinfo.Nodes and Einfo.Entities. This code is mostly moved
here from Sinfo and Einfo to break cycles.
* back_end.adb: Pass node_offsets_ptr and slots_ptr to gigi,
instead of nodes_ptr and flags_ptr. The Nodes and Flags tables
no longer exist. (Note that gigi never used the Flags table.)
* sinfo-cn.ads (Change_Identifier_To_Defining_Identifier,
Change_Character_Literal_To_Defining_Character_Literal,
Change_Operator_Symbol_To_Defining_Operator_Symbol): Turn N into
an IN formal.
* sinfo-cn.adb: Update. Add assertions, which can be removed at
some point. Rewrite to use higher-level facilities. Make sure
vanishing fields are zeroed out. Add with/use for new packages.
* sem_util.adb: Remove "Assert(False)" immediately followed by
"raise Program_Error". Use higher-level facilities such as
Walk_Sinfo_Fields instead of depending on low-level Set_FieldN
routines that no longer exist. Use Get_Comes_From_Source_Default
instead of Default_Node.Comes_From_Source (Default_Node no
longer exists). Use Set_Basic_Convention instead of
Basic_Set_Convention. Add with/use for new packages.
* sem_util.ads: The Convention field had getter Convention and
setter Basic_Set_Convention. Make that more uniform: there is
now a field called Basic_Convention, with Basic_Convention and
Set_Basic_Convention as getter/setter, and write Convention and
Set_Convention here.
* nlists.adb: Rewrite to use abstractions, rather then depending
on low-level implementation details of Atree. Necessary because
those details have changed. Add with/use for new packages.
* sem_ch12.adb: Use higher-level facilities such as
Walk_Sinfo_Fields instead of depending on low-level Set_FieldN
routines that no longer exist. Add with/use for new packages.
* exp_cg.adb, sem_ch10.adb, sem_ch4.adb, sem_eval.adb,
sem_prag.adb, sem_warn.adb: Change expanded names to refer to
the new packages for things that moved. Add with/use for new
packages.
* sem_ch3.adb: Likewise. Reinitialize vanishing fields.
* exp_disp.adb: Likewise. Remove failing assertion.
* sinfo.ads, einfo.ads: Remove code that is now generated into
Sinfo.Nodes and Einfo.Entities.
* sinfo.adb, einfo.adb: Replace bodies with "pragma No_Body;".
We should delete these at some point, but No_Body makes make
files easier. Some code is moved to Sinfo.Nodes, Einfo.Entities,
Sinfo.Utils, and Einfo.Utils. Some is no longer necessary.
* treepr.adb: Rewrite to use new tables. We no longer need
treeprs.ads.
* treepr.ads: Add comment.
* types.ads: Move types Component_Alignment_Kind and
Float_Rep_Kind here.
* atree.h: Major update to match atree.ads changes. Add slot
types, for use by getters/setters.
* types.h: Move types Component_Alignment_Kind and
Float_Rep_Kind here.
* fe.h: Rewrite to deal with code that has changed or moved from
Atree, Sinfo, Einfo.
* nlists.h: Move some code to fe.h.
* alloc.ads: Split Nodes_* constants into Node_Offsets and
Slots, because Atree has two separate tables. Increase values.
Remove Nodes_Release_Threshold. Improve comment.
* debug.adb, gnat1drv.adb: Remove obsolete gnatd.A and gnatd.N
switches. Add with/use for new packages.
* opt.ads: Minor comment fix.
* aspects.adb, checks.adb, comperr.adb, contracts.adb,
cstand.adb, debug_a.adb, errout.adb, eval_fat.adb, exp_aggr.adb,
exp_atag.adb, exp_attr.adb, exp_ch11.adb, exp_ch12.adb,
exp_ch13.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb,
exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb,
exp_code.adb, exp_dbug.adb, exp_dist.adb, exp_fixd.adb,
exp_imgv.adb, exp_intr.adb, exp_pakd.adb, exp_prag.adb,
exp_put_image.adb, exp_sel.adb, exp_smem.adb, exp_spark.adb,
exp_strm.adb, exp_tss.adb, exp_unst.adb, exp_util.adb,
exp_util.ads, expander.adb, freeze.adb, frontend.adb,
get_targ.ads, ghost.adb, gnat_cuda.adb, impunit.adb, inline.adb,
itypes.adb, itypes.ads, layout.adb, lib.adb, lib-load.adb,
lib-writ.adb, lib-xref.adb, lib-xref.ads,
lib-xref-spark_specific.adb, live.adb, par.adb, par_sco.adb,
pprint.adb, repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb,
scn.adb, sem.adb, sem.ads, sem_aggr.adb, sem_attr.adb,
sem_aux.adb, sem_case.adb, sem_cat.adb, sem_ch11.adb,
sem_ch13.adb, sem_ch2.adb, sem_ch5.adb, sem_ch6.adb,
sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, sem_dim.adb,
sem_disp.adb, sem_dist.adb, sem_elab.adb, sem_elim.adb,
sem_intr.adb, sem_mech.adb, sem_res.adb, sem_scil.adb,
sem_smem.adb, sem_type.adb, set_targ.ads, sinput.adb,
sinput-l.adb, sprint.adb, style.adb, styleg.adb, tbuild.adb,
tbuild.ads, uname.adb: Add with/use for new packages.
* libgnat/a-stoubu.adb, libgnat/a-stouut.adb: Simplify to ease
bootstrap.
* libgnat/a-stobfi.adb, libgnat/a-stoufi.adb (Create_File,
Create_New_File): Create file in binary format, to avoid
introducing unwanted text conversions on Windows. Simplify to
ease bootstrap.
* libgnat/a-stteou__bootstrap.ads: New.
* ceinfo.adb, csinfo.adb, nmake.adt, treeprs.adt, xeinfo.adb,
xnmake.adb, xsinfo.adb, xtreeprs.adb: Delete.
* Make-generated.in: Build and run the gen_il program to
generate files. The files are generated in the ada/gen_il
subdirectory, and then moved up to ada. We rely on gnatmake (as
opposed to make) to build the gen_il program efficiently (i.e.
don't do anything if the sources didn't change).
* gcc-interface/Makefile.in (ADAFLAGS): Add -gnatU.
(GNATMAKE_OBJS): Add new object files.
(GENERATED_FILES_FOR_TOOLS): New variable.
(../stamp-tools): Create a link for all
GENERATED_FILES_FOR_TOOLS.
* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add new object
files. Remove ada/treeprs.o.
(GNATBIND_OBJS): Add new object files.
(ada.mostlyclean): Remove ada/sdefault.adb and add
ada/stamp-gen_il.
(ada.maintainer-clean): Remove ada/treeprs.ads.
(update-sources): Remove obsolete target.
(ada_generated_files): Rename to...
(ADA_GENERATED_FILES): ... this. Add new source files. Add
comment.
* gcc-interface/trans.c: Remove obsolete Nodes_Ptr and
Flags_ptr. Add Node_Offsets_Ptr and Slots_Ptr, which point to
the corresponding tables in Atree.
* gcc-interface/gigi.h (gigi): New parameters for initializing
Node_Offsets_Ptr and Slots_Ptr.
* gcc-interface/decl.c: Numeric_Kind,
Discrete_Or_Fixed_Point_Kind, and Record_Kind were
nonhierarchical, and were therefore removed for simplicity.
Replace uses with calls to Is_In_... functions.
gnattools/
* Makefile.in (GENERATED_FILES_FOR_TOOLS): New variable.
($(GCC_DIR)/stamp-tools): Walk it for the first copy operation.
Diffstat (limited to 'gcc/ada/xsinfo.adb')
-rw-r--r-- | gcc/ada/xsinfo.adb | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/gcc/ada/xsinfo.adb b/gcc/ada/xsinfo.adb deleted file mode 100644 index c4488d9..0000000 --- a/gcc/ada/xsinfo.adb +++ /dev/null @@ -1,262 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT SYSTEM UTILITIES -- --- -- --- X S I N F O -- --- -- --- B o d y -- --- -- --- Copyright (C) 1992-2021, 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. See the GNU General Public License -- --- for more details. You should have received a copy of the GNU General -- --- Public License distributed with GNAT; see file COPYING3. If not, go to -- --- http://www.gnu.org/licenses for a complete copy of the license. -- --- -- --- GNAT was originally developed by the GNAT team at New York University. -- --- Extensive contributions were provided by Ada Core Technologies Inc. -- --- -- ------------------------------------------------------------------------------- - --- Program to construct C header file sinfo.h (C version of sinfo.ads spec, --- for use by Gigi, contains all definitions and access functions, but does --- not contain set procedures, since Gigi never modifies the GNAT tree) - --- Input files: - --- sinfo.ads Spec of Sinfo package - --- Output files: - --- sinfo.h Corresponding c header file - --- An optional argument allows the specification of an output file name to --- override the default sinfo.h file name for the generated output file. - -with Ada.Command_Line; use Ada.Command_Line; -with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; -with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO; -with Ada.Text_IO; use Ada.Text_IO; - -with GNAT.Spitbol; use GNAT.Spitbol; -with GNAT.Spitbol.Patterns; use GNAT.Spitbol.Patterns; - -with CSinfo; - -procedure XSinfo is - - Done : exception; - Err : exception; - - A : VString := Nul; - Arg : VString := Nul; - Comment : VString := Nul; - Line : VString := Nul; - N : VString := Nul; - N1, N2 : VString := Nul; - Nam : VString := Nul; - Rtn : VString := Nul; - Term : VString := Nul; - - InS : File_Type; - Ofile : File_Type; - - wsp : constant Pattern := Span (' ' & ASCII.HT); - Wsp_For : constant Pattern := wsp & "for"; - Is_Cmnt : constant Pattern := wsp & "--"; - Typ_Nod : constant Pattern := wsp * A & "type Node_Kind is"; - Get_Nam : constant Pattern := wsp * A & "N_" & Break (",)") * Nam - & Len (1) * Term; - Sub_Typ : constant Pattern := wsp * A & "subtype " & Break (' ') * N; - No_Cont : constant Pattern := wsp & Break (' ') * N1 - & " .. " & Break (';') * N2; - Cont_N1 : constant Pattern := wsp & Break (' ') * N1 & " .." & Rpos (0); - Cont_N2 : constant Pattern := Span (' ') & Break (';') * N2; - Is_Func : constant Pattern := wsp * A & "function " & Rest * Nam; - Get_Arg : constant Pattern := wsp & "(N : " & Break (')') * Arg - & ") return " & Break (';') * Rtn - & ';' & wsp & "--" & wsp & Rest * Comment; - - NKV : Natural; - - M : Match_Result; - - procedure Getline; - -- Get non-comment, non-blank line. Also skips "for " rep clauses - - ------------- - -- Getline -- - ------------- - - procedure Getline is - begin - loop - Line := Get_Line (InS); - - if Line /= "" - and then not Match (Line, Wsp_For) - and then not Match (Line, Is_Cmnt) - then - return; - - elsif Match (Line, " -- End functions (note") then - raise Done; - end if; - end loop; - end Getline; - --- Start of processing for XSinfo - -begin - -- First run CSinfo to check for errors. Note that CSinfo is also a - -- stand-alone program that can be run separately. - - CSinfo; - - Set_Exit_Status (1); - Anchored_Mode := True; - - if Argument_Count > 0 then - Create (Ofile, Out_File, Argument (1)); - else - Create (Ofile, Out_File, "sinfo.h"); - end if; - - Open (InS, In_File, "sinfo.ads"); - - -- Write header to output file - - loop - Line := Get_Line (InS); - exit when Line = ""; - - Match - (Line, - "-- S p e c ", - "-- C Header File "); - - Match (Line, "--", "/*"); - Match (Line, Rtab (2) * A & "--", M); - Replace (M, A & "*/"); - Put_Line (Ofile, Line); - end loop; - - -- Skip to package line - - loop - Getline; - exit when Match (Line, "package"); - end loop; - - -- Skip to first node kind line - - loop - Getline; - exit when Match (Line, Typ_Nod); - Put_Line (Ofile, Line); - end loop; - - Put_Line (Ofile, ""); - - Put_Line (Ofile, "#ifdef __cplusplus"); - Put_Line (Ofile, "extern ""C"" {"); - Put_Line (Ofile, "#endif"); - - NKV := 0; - - -- Loop through node kind codes - - loop - Getline; - - if Match (Line, Get_Nam) then - Put_Line (Ofile, A & "#define N_" & Nam & ' ' & NKV); - NKV := NKV + 1; - exit when not Match (Term, ","); - - else - Put_Line (Ofile, Line); - end if; - end loop; - - Put_Line (Ofile, ""); - Put_Line (Ofile, A & "#define Number_Node_Kinds " & NKV); - - -- Loop through subtype declarations - - loop - Getline; - - if not Match (Line, Sub_Typ) then - exit when Match (Line, " function"); - Put_Line (Ofile, Line); - - else - Put_Line (Ofile, A & "SUBTYPE (" & N & ", Node_Kind, "); - Getline; - - -- Normal case - - if Match (Line, No_Cont) then - Put_Line (Ofile, A & " " & N1 & ", " & N2 & ')'); - - -- Continuation case - - else - if not Match (Line, Cont_N1) then - raise Err; - end if; - - Getline; - - if not Match (Line, Cont_N2) then - raise Err; - end if; - - Put_Line (Ofile, A & " " & N1 & ','); - Put_Line (Ofile, A & " " & N2 & ')'); - end if; - end if; - end loop; - - -- Loop through functions. Note that this loop is terminated by - -- the call to Getfile encountering the end of functions sentinel - - loop - if Match (Line, Is_Func) then - Getline; - if not Match (Line, Get_Arg) then - raise Err; - end if; - Put_Line - (Ofile, - A & "INLINE " & Rpad (Rtn, 9) - & ' ' & Rpad (Nam, 30) & " (" & Arg & " N)"); - - Put_Line (Ofile, A & " { return " & Comment & " (N); }"); - - else - Put_Line (Ofile, Line); - end if; - - Getline; - end loop; - - -- Can't get here since above loop only left via raise - -exception - when Done => - Close (InS); - Put_Line (Ofile, ""); - Put_Line (Ofile, "#ifdef __cplusplus"); - Put_Line (Ofile, "}"); - Put_Line (Ofile, "#endif"); - Close (Ofile); - Set_Exit_Status (0); - -end XSinfo; |