mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-15 10:55:02 +08:00
71ff80dc28
Nathanael Nerode <neroden@gcc.gnu.org> PR ada/6919 (forward port of patch for PR ada/5904) * 1aexcept.adb 1aexcept.ads 41intnam.ads 42intnam.ads 4aintnam.ads 4cintnam.ads 4dintnam.ads 4hexcpol.adb 4lintnam.ads 4mintnam.ads 4nintnam.ads 4onumaux.ads 4pintnam.ads 4rintnam.ads 4sintnam.ads 4uintnam.ads 4vcalend.adb 4vintnam.ads 4wcalend.adb 4wexcpol.adb 4wintnam.ads 4zintnam.ads 4znumaux.ads 4zsytaco.adb 4zsytaco.ads 51osinte.adb 51osinte.ads 52osinte.adb 52osinte.ads 52system.ads 53osinte.ads 5aosinte.ads 5asystem.ads 5atasinf.ads 5ataspri.ads 5avxwork.ads 5bosinte.ads 5bsystem.ads 5cosinte.ads 5dosinte.ads 5esystem.ads 5fosinte.ads 5fsystem.ads 5ftasinf.ads 5ginterr.adb 5gmastop.adb 5gosinte.ads 5gproinf.adb 5gproinf.ads 5gsystem.ads 5gtasinf.adb 5gtasinf.ads 5gtpgetc.adb 5hparame.ads 5hsystem.ads 5htaspri.ads 5iosinte.ads 5itaspri.ads 5ksystem.ads 5kvxwork.ads 5losinte.ads 5lsystem.ads 5mosinte.ads 5mvxwork.ads 5ninmaop.adb 5nintman.adb 5nosinte.ads 5ntaspri.ads 5oosprim.adb 5oparame.adb 5osystem.ads 5posinte.ads 5posprim.adb 5pvxwork.ads 5rosinte.ads 5rparame.adb 5sintman.adb 5sosinte.ads 5sparame.adb 5ssystem.ads 5stasinf.adb 5stasinf.ads 5staspri.ads 5svxwork.ads 5tosinte.ads 5uosinte.ads 5vasthan.adb 5vinterr.adb 5vintman.ads 5vosinte.ads 5vosprim.adb 5vosprim.ads 5vparame.ads 5vsystem.ads 5vtaspri.ads 5vtpopde.adb 5vtpopde.ads 5vvaflop.adb 5wintman.adb 5wmemory.adb 5wosinte.ads 5wosprim.adb 5wsystem.ads 5wtaprop.adb 5wtaspri.ads 5ysystem.ads 5zinterr.adb 5zosinte.adb 5zosinte.ads 5zosprim.adb 5zsystem.ads 6vcpp.adb 6vcstrea.adb 7sosprim.adb 86numaux.adb 86numaux.ads 9drpc.adb a-astaco.adb a-caldel.ads a-calend.adb a-calend.ads a-chahan.adb a-chahan.ads a-colien.adb a-colien.ads a-colire.adb a-colire.ads a-comlin.adb a-comlin.ads a-cwila1.ads a-decima.adb a-decima.ads a-diocst.adb a-diocst.ads a-direio.adb a-direio.ads a-einuoc.adb a-einuoc.ads a-except.adb a-except.ads a-excpol.adb a-exctra.adb a-exctra.ads a-filico.adb a-filico.ads a-finali.adb a-finali.ads a-interr.ads a-intsig.adb a-intsig.ads a-ngcefu.adb a-ngcoty.adb a-ngcoty.ads a-ngelfu.adb a-nudira.adb a-nudira.ads a-nuflra.adb a-nuflra.ads a-numaux.ads a-reatim.ads a-retide.ads a-sequio.adb a-sequio.ads a-siocst.adb a-siocst.ads a-ssicst.adb a-ssicst.ads a-stmaco.ads a-storio.adb a-strbou.adb a-strbou.ads a-stream.ads a-strfix.adb a-strfix.ads a-strmap.adb a-strmap.ads a-strsea.adb a-strsea.ads a-strunb.adb a-strunb.ads a-ststio.adb a-ststio.ads a-stunau.adb a-stunau.ads a-stwibo.adb a-stwibo.ads a-stwifi.adb a-stwima.adb a-stwima.ads a-stwise.adb a-stwise.ads a-stwiun.adb a-stwiun.ads a-suteio.adb a-suteio.ads a-swmwco.ads a-swuwti.adb a-swuwti.ads a-sytaco.adb a-sytaco.ads a-tags.adb a-tags.ads a-tasatt.ads a-taside.adb a-taside.ads a-teioed.adb a-teioed.ads a-textio.adb a-textio.ads a-ticoau.adb a-ticoau.ads a-ticoio.adb a-ticoio.ads a-tideau.adb a-tideau.ads a-tideio.adb a-tideio.ads a-tienau.adb a-tienau.ads a-tienio.adb a-tienio.ads a-tifiio.adb a-tifiio.ads a-tiflau.adb a-tiflau.ads a-tiflio.adb a-tiflio.ads a-tigeau.adb a-tigeau.ads a-tiinau.adb a-tiinau.ads a-tiinio.adb a-tiinio.ads a-timoau.adb a-timoau.ads a-timoio.adb a-timoio.ads a-tiocst.adb a-tiocst.ads a-titest.adb a-witeio.adb a-witeio.ads a-wtcoau.adb a-wtcoau.ads a-wtcoio.adb a-wtcstr.adb a-wtcstr.ads a-wtdeau.adb a-wtdeau.ads a-wtdeio.adb a-wtdeio.ads a-wtedit.adb a-wtedit.ads a-wtenau.adb a-wtenau.ads a-wtenio.adb a-wtenio.ads a-wtfiio.adb a-wtfiio.ads a-wtflau.adb a-wtflau.ads a-wtflio.adb a-wtflio.ads a-wtgeau.adb a-wtgeau.ads a-wtinau.adb a-wtinau.ads a-wtinio.adb a-wtmoau.adb a-wtmoau.ads a-wtmoio.adb a-wtmoio.ads a-wttest.adb ada-tree.def ada-tree.h ada.h adaint.c adaint.h ali-util.adb ali-util.ads ali.adb ali.ads alloc.ads argv.c atree.adb atree.ads atree.h back_end.adb back_end.ads bcheck.adb bcheck.ads binde.adb binde.ads binderr.adb binderr.ads bindgen.adb bindgen.ads bindusg.adb bindusg.ads butil.adb butil.ads cal.c casing.adb casing.ads ceinfo.adb checks.adb checks.ads cio.c comperr.adb comperr.ads csets.adb csets.ads csinfo.adb cstand.adb cstand.ads cstreams.c cuintp.c debug.adb debug.ads debug_a.adb debug_a.ads dec-io.adb dec-io.ads dec.ads decl.c deftarg.c einfo.adb einfo.ads einfo.h elists.adb elists.ads elists.h errno.c errout.adb errout.ads eval_fat.adb eval_fat.ads exit.c exp_aggr.adb exp_aggr.ads exp_attr.adb exp_attr.ads exp_ch10.ads exp_ch11.adb exp_ch11.ads exp_ch12.adb exp_ch12.ads exp_ch13.adb exp_ch13.ads exp_ch2.adb exp_ch2.ads exp_ch3.adb exp_ch3.ads exp_ch4.adb exp_ch4.ads exp_ch5.adb exp_ch5.ads exp_ch6.adb exp_ch6.ads exp_ch7.adb exp_ch7.ads exp_ch8.adb exp_ch8.ads exp_ch9.adb exp_ch9.ads exp_code.adb exp_code.ads exp_dbug.adb exp_dbug.ads exp_disp.adb exp_disp.ads exp_dist.adb exp_dist.ads exp_fixd.adb exp_fixd.ads exp_imgv.adb exp_imgv.ads exp_intr.adb exp_intr.ads exp_pakd.adb exp_pakd.ads exp_prag.adb exp_prag.ads exp_smem.adb exp_smem.ads exp_strm.adb exp_strm.ads exp_tss.adb exp_tss.ads exp_util.adb exp_util.ads exp_vfpt.adb exp_vfpt.ads expander.adb expander.ads fe.h final.c fmap.adb fmap.ads fname-sf.adb fname-sf.ads fname-uf.adb fname-uf.ads fname.adb fname.ads freeze.adb freeze.ads frontend.adb frontend.ads g-calend.ads g-comlin.adb g-debpoo.adb g-debpoo.ads g-locfil.adb g-os_lib.ads g-regist.adb g-regist.ads get_targ.adb get_targ.ads gigi.h gmem.c gnat1drv.adb gnat1drv.ads gnat_ug.texi gnatbind.adb gnatbind.ads gnatbl.c gnatcmd.adb gnatcmd.ads gnatdll.adb gnatfind.adb gnatkr.adb gnatkr.ads gnatlbr.adb gnatlink.adb gnatlink.ads gnatls.adb gnatls.ads gnatmake.adb gnatmake.ads gnatmem.adb gnatprep.adb gnatprep.ads gnatpsta.adb gnatvsn.ads gnatxref.adb hlo.adb hlo.ads hostparm.ads i-c.adb i-cexten.ads i-cobol.adb i-cobol.ads i-cpoint.adb i-cpoint.ads i-cpp.adb i-cpp.ads i-cstrea.adb i-cstrea.ads i-cstrin.adb i-cstrin.ads i-fortra.adb i-os2err.ads i-os2lib.adb i-os2lib.ads i-os2syn.ads i-os2thr.ads i-pacdec.adb i-pacdec.ads impunit.adb impunit.ads init.c inline.adb inline.ads io-aux.c itypes.adb itypes.ads krunch.adb krunch.ads lang-options.h lang-specs.h layout.adb layout.ads lib-list.adb lib-load.adb lib-load.ads lib-sort.adb lib-util.adb lib-util.ads lib-writ.adb lib-writ.ads lib-xref.adb lib-xref.ads lib.adb lib.ads link.c live.adb live.ads make.adb make.ads makeusg.adb makeusg.ads math_lib.adb mdll.adb mdll.ads memtrack.adb misc.c namet.adb namet.ads namet.h nlists.adb nlists.ads nlists.h nmake.adb nmake.ads nmake.adt opt.adb opt.ads osint.adb osint.ads output.adb output.ads par-ch10.adb par-ch11.adb par-ch12.adb par-ch13.adb par-ch2.adb par-ch3.adb par-ch4.adb par-ch5.adb par-ch6.adb par-ch7.adb par-ch8.adb par-ch9.adb par-endh.adb par-labl.adb par-load.adb par-prag.adb par-sync.adb par-tchk.adb par-util.adb par.adb par.ads prj-attr.adb prj-attr.ads prj-com.adb prj-com.ads prj-dect.adb prj-dect.ads prj-env.adb prj-env.ads prj-ext.adb prj-ext.ads prj-nmsc.adb prj-nmsc.ads prj-pars.adb prj-pars.ads prj-part.adb prj-part.ads prj-proc.adb prj-proc.ads prj-strt.adb prj-strt.ads prj-tree.adb prj-tree.ads prj-util.adb prj-util.ads prj.adb prj.ads raise.c raise.h repinfo.adb repinfo.ads repinfo.h restrict.adb restrict.ads rident.ads rtsfind.adb rtsfind.ads s-addima.adb s-addima.ads s-arit64.adb s-arit64.ads s-assert.adb s-assert.ads s-asthan.adb s-asthan.ads s-atacco.adb s-auxdec.adb s-auxdec.ads s-bitops.adb s-bitops.ads s-chepoo.ads s-direio.adb s-direio.ads s-except.ads s-exctab.adb s-exctab.ads s-exnflt.ads s-exngen.adb s-exngen.ads s-exnint.ads s-exnlfl.ads s-exnlin.ads s-exnllf.ads s-exnlli.ads s-exnsfl.ads s-exnsin.ads s-exnssi.ads s-expflt.ads s-expgen.adb s-expgen.ads s-expint.ads s-explfl.ads s-explin.ads s-expllf.ads s-explli.ads s-expllu.adb s-expllu.ads s-expmod.adb s-expmod.ads s-expsfl.ads s-expsin.ads s-expssi.ads s-expuns.adb s-expuns.ads s-fatflt.ads s-fatgen.adb s-fatgen.ads s-fatlfl.ads s-fatllf.ads s-fatsfl.ads s-ficobl.ads s-fileio.adb s-fileio.ads s-finimp.adb s-finimp.ads s-finroo.adb s-finroo.ads s-fore.adb s-fore.ads s-imgbiu.adb s-imgbiu.ads s-imgboo.adb s-imgboo.ads s-imgcha.adb s-imgcha.ads s-imgdec.adb s-imgdec.ads s-imgenu.adb s-imgenu.ads s-imgint.adb s-imgint.ads s-imgllb.adb s-imgllb.ads s-imglld.adb s-imglld.ads s-imglli.adb s-imglli.ads s-imgllu.adb s-imgllu.ads s-imgllw.adb s-imgllw.ads s-imgrea.adb s-imgrea.ads s-imguns.adb s-imguns.ads s-imgwch.adb s-imgwch.ads s-imgwiu.adb s-imgwiu.ads s-inmaop.ads s-interr.adb s-interr.ads s-intman.ads s-io.adb s-io.ads s-maccod.ads s-mantis.adb s-mantis.ads s-memory.adb s-memory.ads s-osprim.ads s-pack03.adb s-pack03.ads s-pack05.adb s-pack05.ads s-pack06.adb s-pack06.ads s-pack07.adb s-pack07.ads s-pack09.adb s-pack09.ads s-pack10.adb s-pack10.ads s-pack11.adb s-pack11.ads s-pack12.adb s-pack12.ads s-pack13.adb s-pack13.ads s-pack14.adb s-pack14.ads s-pack15.adb s-pack15.ads s-pack17.adb s-pack17.ads s-pack18.adb s-pack18.ads s-pack19.adb s-pack19.ads s-pack20.adb s-pack20.ads s-pack21.adb s-pack21.ads s-pack22.adb s-pack22.ads s-pack23.adb s-pack23.ads s-pack24.adb s-pack24.ads s-pack25.adb s-pack25.ads s-pack26.adb s-pack26.ads s-pack27.adb s-pack27.ads s-pack28.adb s-pack28.ads s-pack29.adb s-pack29.ads s-pack30.adb s-pack30.ads s-pack31.adb s-pack31.ads s-pack33.adb s-pack33.ads s-pack34.adb s-pack34.ads s-pack35.adb s-pack35.ads s-pack36.adb s-pack36.ads s-pack37.adb s-pack37.ads s-pack38.adb s-pack38.ads s-pack39.adb s-pack39.ads s-pack40.adb s-pack40.ads s-pack41.adb s-pack41.ads s-pack42.adb s-pack42.ads s-pack43.adb s-pack43.ads s-pack44.adb s-pack44.ads s-pack45.adb s-pack45.ads s-pack46.adb s-pack46.ads s-pack47.adb s-pack47.ads s-pack48.adb s-pack48.ads s-pack49.adb s-pack49.ads s-pack50.adb s-pack50.ads s-pack51.adb s-pack51.ads s-pack52.adb s-pack52.ads s-pack53.adb s-pack53.ads s-pack54.adb s-pack54.ads s-pack55.adb s-pack55.ads s-pack56.adb s-pack56.ads s-pack57.adb s-pack57.ads s-pack58.adb s-pack58.ads s-pack59.adb s-pack59.ads s-pack60.adb s-pack60.ads s-pack61.adb s-pack61.ads s-pack62.adb s-pack62.ads s-pack63.adb s-pack63.ads s-parame.adb s-parame.ads s-parint.adb s-parint.ads s-pooglo.adb s-pooglo.ads s-pooloc.adb s-pooloc.ads s-poosiz.adb s-poosiz.ads s-powtab.ads s-proinf.adb s-proinf.ads s-rpc.adb s-rpc.ads s-scaval.ads s-secsta.adb s-secsta.ads s-sequio.adb s-sequio.ads s-shasto.adb s-shasto.ads s-soflin.adb s-soflin.ads s-sopco3.adb s-sopco3.ads s-sopco4.adb s-sopco4.ads s-sopco5.adb s-sopco5.ads s-stache.adb s-stache.ads s-stalib.adb s-stalib.ads s-stoele.adb s-stopoo.ads s-stratt.adb s-stratt.ads s-strops.adb s-strops.ads s-taprob.ads s-taprop.ads s-tarest.ads s-tasdeb.adb s-tasdeb.ads s-tasinf.adb s-tasinf.ads s-tasini.ads s-taskin.ads s-tasren.ads s-tasres.ads s-tassta.ads s-tpinop.adb s-tpinop.ads s-tpoben.ads s-tpobop.ads s-unstyp.ads s-vaflop.adb s-vaflop.ads s-valboo.adb s-valboo.ads s-valcha.adb s-valcha.ads s-valdec.adb s-valdec.ads s-valenu.adb s-valenu.ads s-valint.adb s-valint.ads s-vallld.adb s-vallld.ads s-vallli.adb s-vallli.ads s-valllu.adb s-valllu.ads s-valrea.adb s-valrea.ads s-valuns.adb s-valuns.ads s-valuti.adb s-valuti.ads s-valwch.adb s-valwch.ads s-vercon.adb s-vercon.ads s-vmexta.adb s-vmexta.ads s-wchcnv.adb s-wchcnv.ads s-wchcon.ads s-wchjis.adb s-wchjis.ads s-wchstw.adb s-wchstw.ads s-wchwts.adb s-wchwts.ads s-widboo.adb s-widboo.ads s-widcha.adb s-widcha.ads s-widenu.adb s-widenu.ads s-widlli.adb s-widlli.ads s-widllu.adb s-widllu.ads s-widwch.adb s-widwch.ads s-wwdcha.adb s-wwdcha.ads s-wwdenu.adb s-wwdenu.ads s-wwdwch.adb s-wwdwch.ads scans.adb scans.ads scn-nlit.adb scn-slit.adb scn.adb scn.ads sdefault.ads sem.adb sem.ads sem_aggr.adb sem_aggr.ads sem_attr.adb sem_attr.ads sem_case.adb sem_case.ads sem_cat.adb sem_cat.ads sem_ch10.adb sem_ch10.ads sem_ch11.adb sem_ch11.ads sem_ch12.adb sem_ch12.ads sem_ch13.adb sem_ch13.ads sem_ch2.adb sem_ch2.ads sem_ch3.adb sem_ch3.ads sem_ch4.adb sem_ch4.ads sem_ch5.adb sem_ch5.ads sem_ch6.adb sem_ch6.ads sem_ch7.adb sem_ch7.ads sem_ch8.adb sem_ch8.ads sem_ch9.adb sem_ch9.ads sem_disp.adb sem_disp.ads sem_dist.adb sem_dist.ads sem_elab.adb sem_elab.ads sem_elim.adb sem_elim.ads sem_eval.adb sem_eval.ads sem_intr.adb sem_intr.ads sem_maps.adb sem_maps.ads sem_mech.adb sem_mech.ads sem_prag.adb sem_prag.ads sem_res.adb sem_res.ads sem_smem.adb sem_smem.ads sem_type.adb sem_type.ads sem_util.adb sem_util.ads sem_vfpt.adb sem_vfpt.ads sem_warn.adb sem_warn.ads sfn_scan.adb sfn_scan.ads sinfo-cn.adb sinfo-cn.ads sinfo.adb sinfo.ads sinfo.h sinput-l.adb sinput-l.ads sinput-p.adb sinput-p.ads sinput.adb sinput.ads snames.adb snames.ads snames.h sprint.adb sprint.ads stand.adb stand.ads stringt.adb stringt.ads stringt.h style.adb style.ads stylesw.adb stylesw.ads switch.adb switch.ads sysdep.c system.ads table.adb table.ads targparm.adb targparm.ads targtyps.c tbuild.adb tbuild.ads trans.c tree_gen.adb tree_gen.ads tree_in.adb tree_in.ads tree_io.adb tree_io.ads treepr.adb treepr.ads treeprs.ads treeprs.adt ttypef.ads ttypes.ads types.adb types.ads types.h uintp.adb uintp.ads uintp.h uname.adb uname.ads urealp.adb urealp.ads urealp.h usage.adb usage.ads utils.c utils2.c validsw.adb validsw.ads widechar.adb widechar.ads xeinfo.adb xnmake.adb xr_tabls.adb xr_tabls.ads xref_lib.adb xref_lib.ads xsinfo.adb xsnames.adb xtreeprs.adb: Correct statements in comments about maintainership of GNAT. From-SVN: r58442
349 lines
17 KiB
Ada
349 lines
17 KiB
Ada
------------------------------------------------------------------------------
|
|
-- --
|
|
-- GNAT COMPILER COMPONENTS --
|
|
-- --
|
|
-- N L I S T S --
|
|
-- --
|
|
-- S p e c --
|
|
-- --
|
|
-- --
|
|
-- Copyright (C) 1992-2000 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 2, 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 COPYING. If not, write --
|
|
-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
|
|
-- MA 02111-1307, USA. --
|
|
-- --
|
|
-- As a special exception, if other files instantiate generics from this --
|
|
-- unit, or you link this unit with other files to produce an executable, --
|
|
-- this unit does not by itself cause the resulting executable to be --
|
|
-- covered by the GNU General Public License. This exception does not --
|
|
-- however invalidate any other reasons why the executable file might be --
|
|
-- covered by the GNU Public License. --
|
|
-- --
|
|
-- GNAT was originally developed by the GNAT team at New York University. --
|
|
-- Extensive contributions were provided by Ada Core Technologies Inc. --
|
|
-- --
|
|
------------------------------------------------------------------------------
|
|
|
|
-- This package provides facilities for manipulating lists of nodes (see
|
|
-- package Atree for format and implementation of tree nodes). The Link field
|
|
-- of the nodes is used as the forward pointer for these lists. See also
|
|
-- package Elists which provides another form of lists that are not threaded
|
|
-- through the nodes (and therefore allow nodes to be on multiple lists).
|
|
|
|
with System;
|
|
with Types; use Types;
|
|
|
|
package Nlists is
|
|
|
|
-- A node list is a list of nodes in a special format that means that
|
|
-- nodes can be on at most one such list. For each node list, a list
|
|
-- header is allocated in the lists table, and a List_Id value references
|
|
-- this header, which may be used to access the nodes in the list using
|
|
-- the set of routines that define this interface.
|
|
|
|
-- Note: node lists can contain either nodes or entities (extended nodes)
|
|
-- or a mixture of nodes and extended nodes.
|
|
|
|
function Last_List_Id return List_Id;
|
|
pragma Inline (Last_List_Id);
|
|
-- Returns Id of last allocated list header
|
|
|
|
function Lists_Address return System.Address;
|
|
pragma Inline (Lists_Address);
|
|
-- Return address of Lists table (used in Back_End for Gigi call)
|
|
|
|
function Num_Lists return Nat;
|
|
pragma Inline (Num_Lists);
|
|
-- Number of currently allocated lists
|
|
|
|
function New_List return List_Id;
|
|
-- Creates a new empty node list. Typically this is used to initialize
|
|
-- a field in some other node which points to a node list where the list
|
|
-- is then subsequently filled in using Append calls.
|
|
|
|
function Empty_List return List_Id renames New_List;
|
|
-- Used in contexts where an empty list (as opposed to an initially empty
|
|
-- list to be filled in) is required.
|
|
|
|
function New_List (Node : Node_Id) return List_Id;
|
|
-- Build a new list initially containing the given node
|
|
|
|
function New_List (Node1, Node2 : Node_Id) return List_Id;
|
|
-- Build a new list initially containing the two given nodes
|
|
|
|
function New_List (Node1, Node2, Node3 : Node_Id) return List_Id;
|
|
-- Build a new list initially containing the three given nodes
|
|
|
|
function New_List (Node1, Node2, Node3, Node4 : Node_Id) return List_Id;
|
|
-- Build a new list initially containing the four given nodes
|
|
|
|
function New_List
|
|
(Node1 : Node_Id;
|
|
Node2 : Node_Id;
|
|
Node3 : Node_Id;
|
|
Node4 : Node_Id;
|
|
Node5 : Node_Id)
|
|
return List_Id;
|
|
-- Build a new list initially containing the five given nodes
|
|
|
|
function New_List
|
|
(Node1 : Node_Id;
|
|
Node2 : Node_Id;
|
|
Node3 : Node_Id;
|
|
Node4 : Node_Id;
|
|
Node5 : Node_Id;
|
|
Node6 : Node_Id)
|
|
return List_Id;
|
|
-- Build a new list initially containing the five given nodes
|
|
|
|
function New_Copy_List (List : List_Id) return List_Id;
|
|
-- Creates a new list containing copies (made with Atree.New_Copy) of every
|
|
-- node in the original list. If the argument is No_List, then the returned
|
|
-- result is No_List. If the argument is an empty list, then the returned
|
|
-- result is a new empty list.
|
|
|
|
function New_Copy_List_Original (List : List_Id) return List_Id;
|
|
-- Same as New_Copy_List but copies only nodes coming from source
|
|
|
|
function New_Copy_List_Tree (List : List_Id) return List_Id;
|
|
-- Similar to New_Copy_List, except that the copies are done using the
|
|
-- Atree.New_Copy_Tree function, which means that a full recursive copy
|
|
-- of the subtrees in the list is performed, setting proper parents. As
|
|
-- for New_Copy_Tree, it is illegal to attempt to copy extended nodes
|
|
-- (entities) either directly or indirectly using this function.
|
|
|
|
function First (List : List_Id) return Node_Id;
|
|
pragma Inline (First);
|
|
-- Obtains the first element of the given node list or, if the node list
|
|
-- has no items or is equal to No_List, then Empty is returned.
|
|
|
|
function First_Non_Pragma (List : List_Id) return Node_Id;
|
|
-- Used when dealing with a list that can contain pragmas to skip past
|
|
-- any initial pragmas and return the first element that is not a pragma.
|
|
-- If the list is empty, or if it contains only pragmas, then Empty is
|
|
-- returned. It is an error to call First_Non_Pragma with a Node_Id value
|
|
-- or No_List (No_List is not considered to be the same as an empty list).
|
|
-- This function also skips N_Null nodes which can result from rewriting
|
|
-- unrecognized or incorrrect pragmas.
|
|
|
|
function Last (List : List_Id) return Node_Id;
|
|
pragma Inline (Last);
|
|
-- Obtains the last element of the given node list or, if the node list
|
|
-- has no items, then Empty is returned. It is an error to call Last with
|
|
-- a Node_Id or No_List. (No_List is not considered to be the same as an
|
|
-- empty node list).
|
|
|
|
function Last_Non_Pragma (List : List_Id) return Node_Id;
|
|
-- Obtains the last element of a given node list that is not a pragma.
|
|
-- If the list is empty, or if it contains only pragmas, then Empty is
|
|
-- returned. It is an error to call Last_Non_Pragma with a Node_Id or
|
|
-- No_List. (No_List is not considered to be the same as an empty list).
|
|
|
|
function List_Length (List : List_Id) return Nat;
|
|
pragma Inline (List_Length);
|
|
-- Returns number of items in the given list. It is an error to call
|
|
-- this function with No_List (No_List is not considered to be the same
|
|
-- as an empty list).
|
|
|
|
function Next (Node : Node_Id) return Node_Id;
|
|
pragma Inline (Next);
|
|
-- This function returns the next node on a node list, or Empty if Node is
|
|
-- the last element of the node list. The argument must be a member of a
|
|
-- node list.
|
|
|
|
procedure Next (Node : in out Node_Id);
|
|
pragma Inline (Next);
|
|
-- Equivalent to Node := Next (Node);
|
|
|
|
function Next_Non_Pragma (Node : Node_Id) return Node_Id;
|
|
-- This function returns the next node on a node list, skipping past any
|
|
-- pragmas, or Empty if there is no non-pragma entry left. The argument
|
|
-- must be a member of a node list. This function also skips N_Null nodes
|
|
-- which can result from rewriting unrecognized or incorrect pragmas.
|
|
|
|
procedure Next_Non_Pragma (Node : in out Node_Id);
|
|
pragma Inline (Next_Non_Pragma);
|
|
-- Equivalent to Node := Next_Non_Pragma (Node);
|
|
|
|
function Prev (Node : Node_Id) return Node_Id;
|
|
pragma Inline (Prev);
|
|
-- This function returns the previous node on a node list list, or Empty if
|
|
-- Node is the first element of the node list. The argument must be a
|
|
-- member of a node list. Note that the implementation does not maintain
|
|
-- back pointers, so this function potentially requires traversal of the
|
|
-- entire list, or more accurately of the part of the list preceding Node.
|
|
|
|
function Pick (List : List_Id; Index : Pos) return Node_Id;
|
|
-- Given a list, picks out the Index'th entry (1 = first entry). The
|
|
-- caller must ensure that Index is in range.
|
|
|
|
procedure Prev (Node : in out Node_Id);
|
|
pragma Inline (Prev);
|
|
-- Equivalent to Node := Prev (Node);
|
|
|
|
function Prev_Non_Pragma (Node : Node_Id) return Node_Id;
|
|
pragma Inline (Prev_Non_Pragma);
|
|
-- This function returns the previous node on a node list, skipping any
|
|
-- pragmas. If Node is the first element of the list, or if the only
|
|
-- elements preceding it are pragmas, then Empty is returned. The
|
|
-- argument must be a member of a node list. Like Prev, this function
|
|
-- may require expensive traversal of the head section of the list.
|
|
|
|
procedure Prev_Non_Pragma (Node : in out Node_Id);
|
|
pragma Inline (Prev_Non_Pragma);
|
|
-- Equivalent to Node := Prev_Non_Pragma (Node);
|
|
|
|
function Is_Empty_List (List : List_Id) return Boolean;
|
|
pragma Inline (Is_Empty_List);
|
|
-- This function determines if a given list id references a node list that
|
|
-- contains no items. No_List is a not a legitimate argument.
|
|
|
|
function Is_Non_Empty_List (List : List_Id) return Boolean;
|
|
pragma Inline (Is_Non_Empty_List);
|
|
-- This function determines if a given list id references a node list that
|
|
-- contains at least one item. No_List as an argument returns False.
|
|
|
|
function Is_List_Member (Node : Node_Id) return Boolean;
|
|
pragma Inline (Is_List_Member);
|
|
-- This function determines if a given node is a member of a node list.
|
|
-- It is an error for Node to be Empty, or to be a node list.
|
|
|
|
function List_Containing (Node : Node_Id) return List_Id;
|
|
pragma Inline (List_Containing);
|
|
-- This function provides a pointer to the node list containing Node.
|
|
-- Node must be a member of a node list.
|
|
|
|
procedure Append (Node : Node_Id; To : List_Id);
|
|
-- Appends Node at the end of node list To. Node must be a non-empty node
|
|
-- that is not already a member of a node list, and To must be a
|
|
-- node list. An attempt to append an error node is ignored without
|
|
-- complaint and the list is unchanged.
|
|
|
|
procedure Append_To (To : List_Id; Node : Node_Id);
|
|
pragma Inline (Append_To);
|
|
-- Like Append, but arguments are the other way round
|
|
|
|
procedure Append_List (List : List_Id; To : List_Id);
|
|
-- Appends node list List to the end of node list To. On return,
|
|
-- List is reset to be empty.
|
|
|
|
procedure Append_List_To (To : List_Id; List : List_Id);
|
|
pragma Inline (Append_List_To);
|
|
-- Like Append_List, but arguments are the other way round
|
|
|
|
procedure Insert_After (After : Node_Id; Node : Node_Id);
|
|
-- Insert Node, which must be a non-empty node that is not already a
|
|
-- member of a node list, immediately past node After, which must be a
|
|
-- node that is currently a member of a node list. An attempt to insert
|
|
-- an error node is ignored without complaint (and the list is unchanged).
|
|
|
|
procedure Insert_List_After (After : Node_Id; List : List_Id);
|
|
-- Inserts the entire contents of node list List immediately after node
|
|
-- After, which must be a member of a node list. On return, the node list
|
|
-- List is reset to be the empty node list.
|
|
|
|
procedure Insert_Before (Before : Node_Id; Node : Node_Id);
|
|
-- Insert Node, which must be a non-empty node that is not already a
|
|
-- member of a node list, immediately before Before, which must be a node
|
|
-- that is currently a member of a node list. An attempt to insert an
|
|
-- error node is ignored without complaint (and the list is unchanged).
|
|
|
|
procedure Insert_List_Before (Before : Node_Id; List : List_Id);
|
|
-- Inserts the entire contents of node list List immediately before node
|
|
-- Before, which must be a member of a node list. On return, the node list
|
|
-- List is reset to be the empty node list.
|
|
|
|
procedure Prepend (Node : Node_Id; To : List_Id);
|
|
pragma Inline (Prepend);
|
|
-- Prepends Node at the start of node list To. Node must be a non-empty
|
|
-- node that is not already a member of a node list, and To must be a
|
|
-- node list. An attempt to prepend an error node is ignored without
|
|
-- complaint and the list is unchanged.
|
|
|
|
procedure Prepend_To (To : List_Id; Node : Node_Id);
|
|
pragma Inline (Prepend_To);
|
|
-- Like Prepend, but arguments are the other way round
|
|
|
|
procedure Remove (Node : Node_Id);
|
|
-- Removes Node, which must be a node that is a member of a node list,
|
|
-- from this node list. The contents of Node are not otherwise affected.
|
|
|
|
function Remove_Head (List : List_Id) return Node_Id;
|
|
-- Removes the head element of a node list, and returns the node (whose
|
|
-- contents are not otherwise affected) as the result. If the node list
|
|
-- is empty, then Empty is returned.
|
|
|
|
function Remove_Next (Node : Node_Id) return Node_Id;
|
|
pragma Inline (Remove_Next);
|
|
-- Removes the item immediately following the given node, and returns it
|
|
-- as the result. If Node is the last element of the list, then Empty is
|
|
-- returned. Node must be a member of a list. Unlike Remove, Remove_Next
|
|
-- is fast and does not involve any list traversal.
|
|
|
|
procedure Initialize;
|
|
-- Called at the start of compilation of each new main source file to
|
|
-- initialize the allocation of the list table. Note that Initialize
|
|
-- must not be called if Tree_Read is used.
|
|
|
|
procedure Lock;
|
|
-- Called to lock tables before back end is called
|
|
|
|
procedure Tree_Read;
|
|
-- Initializes internal tables from current tree file using Tree_Read.
|
|
-- Note that Initialize should not be called if Tree_Read is used.
|
|
-- Tree_Read includes all necessary initialization.
|
|
|
|
procedure Tree_Write;
|
|
-- Writes out internal tables to current tree file using Tree_Write
|
|
|
|
function Parent (List : List_Id) return Node_Id;
|
|
pragma Inline (Parent);
|
|
-- Node lists may have a parent in the same way as a node. The function
|
|
-- accesses the Parent value, which is either Empty when a list header
|
|
-- is first created, or the value that has been set by Set_Parent.
|
|
|
|
procedure Set_Parent (List : List_Id; Node : Node_Id);
|
|
pragma Inline (Set_Parent);
|
|
-- Sets the parent field of the given list to reference the given node
|
|
|
|
function No (List : List_Id) return Boolean;
|
|
pragma Inline (No);
|
|
-- Tests given Id for equality with No_List. This allows notations like
|
|
-- "if No (Statements)" as opposed to "if Statements = No_List".
|
|
|
|
function Present (List : List_Id) return Boolean;
|
|
pragma Inline (Present);
|
|
-- Tests given Id for inequality with No_List. This allows notations like
|
|
-- "if Present (Statements)" as opposed to "if Statements /= No_List".
|
|
|
|
procedure Allocate_List_Tables (N : Node_Id);
|
|
-- Called when nodes table is expanded to include node N. This call
|
|
-- makes sure that list structures internal to Nlists are adjusted
|
|
-- appropriately to reflect this increase in the size of the nodes table.
|
|
|
|
function Next_Node_Address return System.Address;
|
|
function Prev_Node_Address return System.Address;
|
|
-- These functions return the addresses of the Next_Node and Prev_Node
|
|
-- tables (used in Back_End for Gigi).
|
|
|
|
procedure Delete_List (L : List_Id);
|
|
-- Removes all elements of the given list, and calls Delete_Tree on each
|
|
|
|
function p (U : Union_Id) return Node_Id;
|
|
-- This function is intended for use from the debugger, it determines
|
|
-- whether U is a Node_Id or List_Id, and calls the appropriate Parent
|
|
-- function and returns the parent Node in either case. This is shorter
|
|
-- to type, and avoids the overloading problem of using Parent. It
|
|
-- should NEVER be used except from the debugger. If p is called with
|
|
-- other than a node or list id value, it returns 99_999_999.
|
|
|
|
end Nlists;
|