--- gpc-4.1-2.1-4.1.2.orig/gpc-20060325-20070904.diff +++ gpc-4.1-2.1-4.1.2/gpc-20060325-20070904.diff @@ -0,0 +1,27785 @@ +diff -urN gpc-20060325/p/COPYING gpc-20070904/p/COPYING +--- gpc-20060325/p/COPYING 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/COPYING 2007-09-04 08:22:55.000000000 +0200 +@@ -4,295 +4,666 @@ + 1 GNU GENERAL PUBLIC LICENSE + **************************** + +- Version 2, June 1991 ++ Version 3, 29 June 2007 + +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. ++ Everyone is permitted to copy and distribute verbatim copies of this ++ license document, but changing it is not allowed. + +-GPL Preamble +-============ +- +-The licenses for most software are designed to take away your freedom +-to share and change it. By contrast, the GNU General Public License is +-intended to guarantee your freedom to share and change free software - +-to make sure the software is free for all its users. This General +-Public License applies to most of the Free Software Foundation's +-software and to any other program whose authors commit to using it. +-(Some other Free Software Foundation software is covered by the GNU +-Lesser General Public License instead.) You can apply it to your +-programs, too. ++Preamble ++======== ++ ++The GNU General Public License is a free, copyleft license for software ++and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains ++free software for all its users. We, the Free Software Foundation, use ++the GNU General Public License for most of our software; it applies ++also to any other work released this way by its authors. You can apply ++it to your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it in +-new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you ++have certain responsibilities if you distribute copies of the software, ++or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, +-and (2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, receive ++or can get the source code. And you must show them these terms so they ++know their rights. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the ++manufacturer can do so. This is fundamentally incompatible with the ++aim of protecting users' freedom to change the software. The ++systematic pattern of such abuse occurs in the area of products for ++individuals to use, which is precisely where it is most unacceptable. ++Therefore, we have designed this version of the GPL to prohibit the ++practice for those products. If such problems arise substantially in ++other domains, we stand ready to extend this provision to those domains ++in future versions of the GPL, as needed to protect the freedom of ++users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- 0. This License applies to any program or other work which contains a +- notice placed by the copyright holder saying it may be distributed +- under the terms of this General Public License. The "Program", +- below, refers to any such program or work, and a "work based on +- the Program" means either the Program or any derivative work under +- copyright law: that is to say, a work containing the Program or a +- portion of it, either verbatim or with modifications and/or +- translated into another language. (Hereinafter, translation is +- included without limitation in the term "modification".) Each +- licensee is addressed as "you". +- +- Activities other than copying, distribution and modification are +- not covered by this License; they are outside its scope. The act +- of running the Program is not restricted, and the output from the +- Program is covered only if its contents constitute a work based on +- the Program (independent of having been made by running the +- Program). Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +- source code as you receive it, in any medium, provided that you +- conspicuously and appropriately publish on each copy an appropriate +- copyright notice and disclaimer of warranty; keep intact all the +- notices that refer to this License and to the absence of any +- warranty; and give any other recipients of the Program a copy of +- this License along with the Program. +- +- You may charge a fee for the physical act of transferring a copy, +- and you may at your option offer warranty protection in exchange +- for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +- of it, thus forming a work based on the Program, and copy and +- distribute such modifications or work under the terms of Section 1 +- above, provided that you also meet all of these conditions: +- +- a. You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b. You must cause any work that you distribute or publish, that +- in whole or in part contains or is derived from the Program +- or any part thereof, to be licensed as a whole at no charge +- to all third parties under the terms of this License. +- +- c. If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display +- an announcement including an appropriate copyright notice and +- a notice that there is no warranty (or else, saying that you +- provide a warranty) and that users may redistribute the +- program under these conditions, and telling the user how to +- view a copy of this License. (Exception: if the Program +- itself is interactive but does not normally print such an +- announcement, your work based on the Program is not required +- to print an announcement.) +- +- These requirements apply to the modified work as a whole. If +- identifiable sections of that work are not derived from the +- Program, and can be reasonably considered independent and separate +- works in themselves, then this License, and its terms, do not +- apply to those sections when you distribute them as separate +- works. But when you distribute the same sections as part of a +- whole which is a work based on the Program, the distribution of +- the whole must be on the terms of this License, whose permissions +- for other licensees extend to the entire whole, and thus to each +- and every part regardless of who wrote it. +- +- Thus, it is not the intent of this section to claim rights or +- contest your rights to work written entirely by you; rather, the +- intent is to exercise the right to control the distribution of +- derivative or collective works based on the Program. +- +- In addition, mere aggregation of another work not based on the +- Program with the Program (or with a work based on the Program) on +- a volume of a storage or distribution medium does not bring the +- other work under the scope of this License. +- +- 3. You may copy and distribute the Program (or a work based on it, +- under Section 2) in object code or executable form under the terms +- of Sections 1 and 2 above provided that you also do one of the +- following: +- +- a. Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of +- Sections 1 and 2 above on a medium customarily used for +- software interchange; or, +- +- b. Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a +- medium customarily used for software interchange; or, +- +- c. Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with +- such an offer, in accord with Subsection b above.) +- +- The source code for a work means the preferred form of the work for +- making modifications to it. For an executable work, complete +- source code means all the source code for all modules it contains, +- plus any associated interface definition files, plus the scripts +- used to control compilation and installation of the executable. +- However, as a special exception, the source code distributed need +- not include anything that is normally distributed (in either +- source or binary form) with the major components (compiler, +- kernel, and so on) of the operating system on which the executable +- runs, unless that component itself accompanies the executable. +- +- If distribution of executable or object code is made by offering +- access to copy from a designated place, then offering equivalent +- access to copy the source code from the same place counts as +- distribution of the source code, even though third parties are not +- compelled to copy the source along with the object code. +- +- 4. You may not copy, modify, sublicense, or distribute the Program +- except as expressly provided under this License. Any attempt +- otherwise to copy, modify, sublicense or distribute the Program is +- void, and will automatically terminate your rights under this +- License. However, parties who have received copies, or rights, +- from you under this License will not have their licenses +- terminated so long as such parties remain in full compliance. +- +- 5. You are not required to accept this License, since you have not +- signed it. However, nothing else grants you permission to modify +- or distribute the Program or its derivative works. These actions +- are prohibited by law if you do not accept this License. +- Therefore, by modifying or distributing the Program (or any work +- based on the Program), you indicate your acceptance of this +- License to do so, and all its terms and conditions for copying, +- distributing or modifying the Program or works based on it. +- +- 6. Each time you redistribute the Program (or any work based on the +- Program), the recipient automatically receives a license from the +- original licensor to copy, distribute or modify the Program +- subject to these terms and conditions. You may not impose any +- further restrictions on the recipients' exercise of the rights +- granted herein. You are not responsible for enforcing compliance +- by third parties to this License. +- +- 7. If, as a consequence of a court judgment or allegation of patent +- infringement or for any other reason (not limited to patent +- issues), conditions are imposed on you (whether by court order, ++TERMS AND CONDITIONS ++==================== ++ ++ 0. Definitions. ++ ++ "This License" refers to version 3 of the GNU General Public ++ License. ++ ++ "Copyright" also means copyright-like laws that apply to other ++ kinds of works, such as semiconductor masks. ++ ++ "The Program" refers to any copyrightable work licensed under this ++ License. Each licensee is addressed as "you". "Licensees" and ++ "recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the ++ work in a fashion requiring copyright permission, other than the ++ making of an exact copy. The resulting work is called a "modified ++ version" of the earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work ++ based on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++ permission, would make you directly or secondarily liable for ++ infringement under applicable copyright law, except executing it ++ on a computer or modifying a private copy. Propagation includes ++ copying, distribution (with or without modification), making ++ available to the public, and in some countries other activities as ++ well. ++ ++ To "convey" a work means any kind of propagation that enables other ++ parties to make or receive copies. Mere interaction with a user ++ through a computer network, with no transfer of a copy, is not ++ conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++ to the extent that it includes a convenient and prominently visible ++ feature that (1) displays an appropriate copyright notice, and (2) ++ tells the user that there is no warranty for the work (except to ++ the extent that warranties are provided), that licensees may ++ convey the work under this License, and how to view a copy of this ++ License. If the interface presents a list of user commands or ++ options, such as a menu, a prominent item in the list meets this ++ criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++ for making modifications to it. "Object code" means any ++ non-source form of a work. ++ ++ A "Standard Interface" means an interface that either is an ++ official standard defined by a recognized standards body, or, in ++ the case of interfaces specified for a particular programming ++ language, one that is widely used among developers working in that ++ language. ++ ++ The "System Libraries" of an executable work include anything, ++ other than the work as a whole, that (a) is included in the normal ++ form of packaging a Major Component, but which is not part of that ++ Major Component, and (b) serves only to enable use of the work ++ with that Major Component, or to implement a Standard Interface ++ for which an implementation is available to the public in source ++ code form. A "Major Component", in this context, means a major ++ essential component (kernel, window system, and so on) of the ++ specific operating system (if any) on which the executable work ++ runs, or a compiler used to produce the work, or an object code ++ interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++ the source code needed to generate, install, and (for an executable ++ work) run the object code and to modify the work, including ++ scripts to control those activities. However, it does not include ++ the work's System Libraries, or general-purpose tools or generally ++ available free programs which are used unmodified in performing ++ those activities but which are not part of the work. For example, ++ Corresponding Source includes interface definition files ++ associated with source files for the work, and the source code for ++ shared libraries and dynamically linked subprograms that the work ++ is specifically designed to require, such as by intimate data ++ communication or control flow between those subprograms and other ++ parts of the work. ++ ++ The Corresponding Source need not include anything that users can ++ regenerate automatically from other parts of the Corresponding ++ Source. ++ ++ The Corresponding Source for a work in source code form is that ++ same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++ copyright on the Program, and are irrevocable provided the stated ++ conditions are met. This License explicitly affirms your unlimited ++ permission to run the unmodified Program. The output from running ++ a covered work is covered by this License only if the output, ++ given its content, constitutes a covered work. This License ++ acknowledges your rights of fair use or other equivalent, as ++ provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++ convey, without conditions so long as your license otherwise ++ remains in force. You may convey covered works to others for the ++ sole purpose of having them make modifications exclusively for ++ you, or provide you with facilities for running those works, ++ provided that you comply with the terms of this License in ++ conveying all material for which you do not control copyright. ++ Those thus making or running the covered works for you must do so ++ exclusively on your behalf, under your direction and control, on ++ terms that prohibit them from making any copies of your ++ copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++ the conditions stated below. Sublicensing is not allowed; section ++ 10 makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++ measure under any applicable law fulfilling obligations under ++ article 11 of the WIPO copyright treaty adopted on 20 December ++ 1996, or similar laws prohibiting or restricting circumvention of ++ such measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++ circumvention of technological measures to the extent such ++ circumvention is effected by exercising rights under this License ++ with respect to the covered work, and you disclaim any intention ++ to limit operation or modification of the work as a means of ++ enforcing, against the work's users, your or third parties' legal ++ rights to forbid circumvention of technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey verbatim copies of the Program's source code as you ++ receive it, in any medium, provided that you conspicuously and ++ appropriately publish on each copy an appropriate copyright notice; ++ keep intact all notices stating that this License and any ++ non-permissive terms added in accord with section 7 apply to the ++ code; keep intact all notices of the absence of any warranty; and ++ give all recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++ and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++ produce it from the Program, in the form of source code under the ++ terms of section 4, provided that you also meet all of these ++ conditions: ++ ++ a. The work must carry prominent notices stating that you ++ modified it, and giving a relevant date. ++ ++ b. The work must carry prominent notices stating that it is ++ released under this License and any conditions added under ++ section 7. This requirement modifies the requirement in ++ section 4 to "keep intact all notices". ++ ++ c. You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable ++ section 7 additional terms, to the whole of the work, and all ++ its parts, regardless of how they are packaged. This License ++ gives no permission to license the work in any other way, but ++ it does not invalidate such permission if you have separately ++ received it. ++ ++ d. If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has ++ interactive interfaces that do not display Appropriate Legal ++ Notices, your work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++ works, which are not by their nature extensions of the covered ++ work, and which are not combined with it such as to form a larger ++ program, in or on a volume of a storage or distribution medium, is ++ called an "aggregate" if the compilation and its resulting ++ copyright are not used to limit the access or legal rights of the ++ compilation's users beyond what the individual works permit. ++ Inclusion of a covered work in an aggregate does not cause this ++ License to apply to the other parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++ of sections 4 and 5, provided that you also convey the ++ machine-readable Corresponding Source under the terms of this ++ License, in one of these ways: ++ ++ a. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for ++ as long as you offer spare parts or customer support for that ++ product model, to give anyone who possesses the object code ++ either (1) a copy of the Corresponding Source for all the ++ software in the product that is covered by this License, on a ++ durable physical medium customarily used for software ++ interchange, for a price no more than your reasonable cost of ++ physically performing this conveying of source, or (2) access ++ to copy the Corresponding Source from a network server at no ++ charge. ++ ++ c. Convey individual copies of the object code with a copy of ++ the written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, ++ and only if you received the object code with such an offer, ++ in accord with subsection 6b. ++ ++ d. Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access ++ to the Corresponding Source in the same way through the same ++ place at no further charge. You need not require recipients ++ to copy the Corresponding Source along with the object code. ++ If the place to copy the object code is a network server, the ++ Corresponding Source may be on a different server (operated ++ by you or a third party) that supports equivalent copying ++ facilities, provided you maintain clear directions next to ++ the object code saying where to find the Corresponding Source. ++ Regardless of what server hosts the Corresponding Source, you ++ remain obligated to ensure that it is available for as long ++ as needed to satisfy these requirements. ++ ++ e. Convey the object code using peer-to-peer transmission, ++ provided you inform other peers where the object code and ++ Corresponding Source of the work are being offered to the ++ general public at no charge under subsection 6d. ++ ++ ++ A separable portion of the object code, whose source code is ++ excluded from the Corresponding Source as a System Library, need ++ not be included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means ++ any tangible personal property which is normally used for personal, ++ family, or household purposes, or (2) anything designed or sold for ++ incorporation into a dwelling. In determining whether a product ++ is a consumer product, doubtful cases shall be resolved in favor of ++ coverage. For a particular product received by a particular user, ++ "normally used" refers to a typical or common use of that class of ++ product, regardless of the status of the particular user or of the ++ way in which the particular user actually uses, or expects or is ++ expected to use, the product. A product is a consumer product ++ regardless of whether the product has substantial commercial, ++ industrial or non-consumer uses, unless such uses represent the ++ only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++ procedures, authorization keys, or other information required to ++ install and execute modified versions of a covered work in that ++ User Product from a modified version of its Corresponding Source. ++ The information must suffice to ensure that the continued ++ functioning of the modified object code is in no case prevented or ++ interfered with solely because modification has been made. ++ ++ If you convey an object code work under this section in, or with, ++ or specifically for use in, a User Product, and the conveying ++ occurs as part of a transaction in which the right of possession ++ and use of the User Product is transferred to the recipient in ++ perpetuity or for a fixed term (regardless of how the transaction ++ is characterized), the Corresponding Source conveyed under this ++ section must be accompanied by the Installation Information. But ++ this requirement does not apply if neither you nor any third party ++ retains the ability to install modified object code on the User ++ Product (for example, the work has been installed in ROM). ++ ++ The requirement to provide Installation Information does not ++ include a requirement to continue to provide support service, ++ warranty, or updates for a work that has been modified or ++ installed by the recipient, or for the User Product in which it ++ has been modified or installed. Access to a network may be denied ++ when the modification itself materially and adversely affects the ++ operation of the network or violates the rules and protocols for ++ communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information ++ provided, in accord with this section must be in a format that is ++ publicly documented (and with an implementation available to the ++ public in source code form), and must require no special password ++ or key for unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of ++ this License by making exceptions from one or more of its ++ conditions. Additional permissions that are applicable to the ++ entire Program shall be treated as though they were included in ++ this License, to the extent that they are valid under applicable ++ law. If additional permissions apply only to part of the Program, ++ that part may be used separately under those permissions, but the ++ entire Program remains governed by this License without regard to ++ the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++ remove any additional permissions from that copy, or from any part ++ of it. (Additional permissions may be written to require their own ++ removal in certain cases when you modify the work.) You may place ++ additional permissions on material, added by you to a covered work, ++ for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material ++ you add to a covered work, you may (if authorized by the copyright ++ holders of that material) supplement the terms of this License ++ with terms: ++ ++ a. Disclaiming warranty or limiting liability differently from ++ the terms of sections 15 and 16 of this License; or ++ ++ b. Requiring preservation of specified reasonable legal notices ++ or author attributions in that material or in the Appropriate ++ Legal Notices displayed by works containing it; or ++ ++ c. Prohibiting misrepresentation of the origin of that material, ++ or requiring that modified versions of such material be ++ marked in reasonable ways as different from the original ++ version; or ++ ++ d. Limiting the use for publicity purposes of names of licensors ++ or authors of the material; or ++ ++ e. Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f. Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified ++ versions of it) with contractual assumptions of liability to ++ the recipient, for any liability that these contractual ++ assumptions directly impose on those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++ restrictions" within the meaning of section 10. If the Program as ++ you received it, or any part of it, contains a notice stating that ++ it is governed by this License along with a term that is a further ++ restriction, you may remove that term. If a license document ++ contains a further restriction but permits relicensing or ++ conveying under this License, you may add to a covered work ++ material governed by the terms of that license document, provided ++ that the further restriction does not survive such relicensing or ++ conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++ must place, in the relevant source files, a statement of the ++ additional terms that apply to those files, or a notice indicating ++ where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in ++ the form of a separately written license, or stated as exceptions; ++ the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++ provided under this License. Any attempt otherwise to propagate or ++ modify it is void, and will automatically terminate your rights ++ under this License (including any patent licenses granted under ++ the third paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++ license from a particular copyright holder is reinstated (a) ++ provisionally, unless and until the copyright holder explicitly ++ and finally terminates your license, and (b) permanently, if the ++ copyright holder fails to notify you of the violation by some ++ reasonable means prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++ reinstated permanently if the copyright holder notifies you of the ++ violation by some reasonable means, this is the first time you have ++ received notice of violation of this License (for any work) from ++ that copyright holder, and you cure the violation prior to 30 days ++ after your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate ++ the licenses of parties who have received copies or rights from ++ you under this License. If your rights have been terminated and ++ not permanently reinstated, you do not qualify to receive new ++ licenses for the same material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++ run a copy of the Program. Ancillary propagation of a covered work ++ occurring solely as a consequence of using peer-to-peer ++ transmission to receive a copy likewise does not require ++ acceptance. However, nothing other than this License grants you ++ permission to propagate or modify any covered work. These actions ++ infringe copyright if you do not accept this License. Therefore, ++ by modifying or propagating a covered work, you indicate your ++ acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++ receives a license from the original licensors, to run, modify and ++ propagate that work, subject to this License. You are not ++ responsible for enforcing compliance by third parties with this ++ License. ++ ++ An "entity transaction" is a transaction transferring control of an ++ organization, or substantially all assets of one, or subdividing an ++ organization, or merging organizations. If propagation of a ++ covered work results from an entity transaction, each party to that ++ transaction who receives a copy of the work also receives whatever ++ licenses to the work the party's predecessor in interest had or ++ could give under the previous paragraph, plus a right to ++ possession of the Corresponding Source of the work from the ++ predecessor in interest, if the predecessor has it or can get it ++ with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++ rights granted or affirmed under this License. For example, you ++ may not impose a license fee, royalty, or other charge for ++ exercise of rights granted under this License, and you may not ++ initiate litigation (including a cross-claim or counterclaim in a ++ lawsuit) alleging that any patent claim is infringed by making, ++ using, selling, offering for sale, or importing the Program or any ++ portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++ License of the Program or a work on which the Program is based. ++ The work thus licensed is called the contributor's "contributor ++ version". ++ ++ A contributor's "essential patent claims" are all patent claims ++ owned or controlled by the contributor, whether already acquired or ++ hereafter acquired, that would be infringed by some manner, ++ permitted by this License, of making, using, or selling its ++ contributor version, but do not include claims that would be ++ infringed only as a consequence of further modification of the ++ contributor version. For purposes of this definition, "control" ++ includes the right to grant patent sublicenses in a manner ++ consistent with the requirements of this License. ++ ++ Each contributor grants you a non-exclusive, worldwide, ++ royalty-free patent license under the contributor's essential ++ patent claims, to make, use, sell, offer for sale, import and ++ otherwise run, modify and propagate the contents of its ++ contributor version. ++ ++ In the following three paragraphs, a "patent license" is any ++ express agreement or commitment, however denominated, not to ++ enforce a patent (such as an express permission to practice a ++ patent or covenant not to sue for patent infringement). To ++ "grant" such a patent license to a party means to make such an ++ agreement or commitment not to enforce a patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent ++ license, and the Corresponding Source of the work is not available ++ for anyone to copy, free of charge and under the terms of this ++ License, through a publicly available network server or other ++ readily accessible means, then you must either (1) cause the ++ Corresponding Source to be so available, or (2) arrange to deprive ++ yourself of the benefit of the patent license for this particular ++ work, or (3) arrange, in a manner consistent with the requirements ++ of this License, to extend the patent license to downstream ++ recipients. "Knowingly relying" means you have actual knowledge ++ that, but for the patent license, your conveying the covered work ++ in a country, or your recipient's use of the covered work in a ++ country, would infringe one or more identifiable patents in that ++ country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++ arrangement, you convey, or propagate by procuring conveyance of, a ++ covered work, and grant a patent license to some of the parties ++ receiving the covered work authorizing them to use, propagate, ++ modify or convey a specific copy of the covered work, then the ++ patent license you grant is automatically extended to all ++ recipients of the covered work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++ the scope of its coverage, prohibits the exercise of, or is ++ conditioned on the non-exercise of one or more of the rights that ++ are specifically granted under this License. You may not convey a ++ covered work if you are a party to an arrangement with a third ++ party that is in the business of distributing software, under ++ which you make payment to the third party based on the extent of ++ your activity of conveying the work, and under which the third ++ party grants, to any of the parties who would receive the covered ++ work from you, a discriminatory patent license (a) in connection ++ with copies of the covered work conveyed by you (or copies made ++ from those copies), or (b) primarily for and in connection with ++ specific products or compilations that contain the covered work, ++ unless you entered into that arrangement, or that patent license ++ was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++ any implied license or other defenses to infringement that may ++ otherwise be available to you under applicable patent law. ++ ++ 12. No Surrender of Others' Freedom. ++ ++ If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this +- License. If you cannot distribute so as to satisfy simultaneously +- your obligations under this License and any other pertinent +- obligations, then as a consequence you may not distribute the +- Program at all. For example, if a patent license would not permit +- royalty-free redistribution of the Program by all those who +- receive copies directly or indirectly through you, then the only +- way you could satisfy both it and this License would be to refrain +- entirely from distribution of the Program. +- +- If any portion of this section is held invalid or unenforceable +- under any particular circumstance, the balance of the section is +- intended to apply and the section as a whole is intended to apply +- in other circumstances. +- +- It is not the purpose of this section to induce you to infringe any +- patents or other property right claims or to contest validity of +- any such claims; this section has the sole purpose of protecting +- the integrity of the free software distribution system, which is +- implemented by public license practices. Many people have made +- generous contributions to the wide range of software distributed +- through that system in reliance on consistent application of that +- system; it is up to the author/donor to decide if he or she is +- willing to distribute software through any other system and a +- licensee cannot impose that choice. +- +- This section is intended to make thoroughly clear what is believed +- to be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +- certain countries either by patents or by copyrighted interfaces, +- the original copyright holder who places the Program under this +- License may add an explicit geographical distribution limitation +- excluding those countries, so that distribution is permitted only +- in or among countries not thus excluded. In such case, this +- License incorporates the limitation as if written in the body of +- this License. +- +- 9. The Free Software Foundation may publish revised and/or new +- versions of the General Public License from time to time. Such +- new versions will be similar in spirit to the present version, but +- may differ in detail to address new problems or concerns. ++ License. If you cannot convey a covered work so as to satisfy ++ simultaneously your obligations under this License and any other ++ pertinent obligations, then as a consequence you may not convey it ++ at all. For example, if you agree to terms that obligate you to ++ collect a royalty for further conveying from those to whom you ++ convey the Program, the only way you could satisfy both those ++ terms and this License would be to refrain entirely from conveying ++ the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++ permission to link or combine any covered work with a work licensed ++ under version 3 of the GNU Affero General Public License into a ++ single combined work, and to convey the resulting work. The terms ++ of this License will continue to apply to the part which is the ++ covered work, but the special requirements of the GNU Affero ++ General Public License, section 13, concerning interaction through ++ a network will apply to the combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new ++ versions of the GNU General Public License from time to time. ++ Such new versions will be similar in spirit to the present ++ version, but may differ in detail to address new problems or ++ concerns. + + Each version is given a distinguishing version number. If the +- Program specifies a version number of this License which applies +- to it and "any later version", you have the option of following +- the terms and conditions either of that version or of any later +- version published by the Free Software Foundation. If the Program +- does not specify a version number of this License, you may choose ++ Program specifies that a certain numbered version of the GNU ++ General Public License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that numbered version or of any later version published by the ++ Free Software Foundation. If the Program does not specify a ++ version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + +- 10. If you wish to incorporate parts of the Program into other free +- programs whose distribution conditions are different, write to the +- author to ask for permission. For software which is copyrighted +- by the Free Software Foundation, write to the Free Software +- Foundation; we sometimes make exceptions for this. Our decision +- will be guided by the two goals of preserving the free status of +- all derivatives of our free software and of promoting the sharing +- and reuse of software generally. +- +- NO WARRANTY +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO +- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE +- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT +- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE +- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY +- SERVICING, REPAIR OR CORRECTION. +- +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY +- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE +- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU +- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY +- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN +- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ If the Program specifies that a proxy can decide which future ++ versions of the GNU General Public License can be used, that ++ proxy's public statement of acceptance of a version permanently ++ authorizes you to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++ permissions. However, no additional obligations are imposed on any ++ author or copyright holder as a result of your choosing to follow a ++ later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE ++ COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" ++ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, ++ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE ++ RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. ++ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL ++ NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ++ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES ++ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU ++ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR ++ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE ++ THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA ++ BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD ++ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF ++ THE POSSIBILITY OF SUCH DAMAGES. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++ above cannot be given local legal effect according to their terms, ++ reviewing courts shall apply local law that most closely ++ approximates an absolute waiver of all civil liability in ++ connection with the Program, unless a warranty or assumption of ++ liability accompanies a copy of the Program in return for a fee. ++ ++ ++END OF TERMS AND CONDITIONS ++=========================== + +- END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + ============================================= + +@@ -303,57 +674,50 @@ + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. ++state the exclusion of warranty; and each file should have at least the ++"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. +- Copyright (C) YEAR NAME OF AUTHOR ++ Copyright (C) YEAR NAME OF AUTHOR + +- This program is free software; you can redistribute it and/or modify ++ This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. ++ the Free Software Foundation, either version 3 of the License, or (at ++ your option) any later version. + +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT 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 +- along with this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ along with this program. If not, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper + mail. + +- If the program is interactive, make it output a short notice like +-this when it starts in an interactive mode: ++ If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: + +- Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +- type `show w'. ++ PROGRAM Copyright (C) YEAR NAME OF AUTHOR ++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +-appropriate parts of the General Public License. Of course, the +-commands you use may be called something other than `show w' and `show +-c'; they could even be mouse-clicks or menu items - whatever suits your +-program. ++appropriate parts of the General Public License. Of course, your ++program's commands might be different; for a GUI interface, you would ++use an "about box". + + You should also get your employer (if you work as a programmer) or +-your school, if any, to sign a "copyright disclaimer" for the program, +-if necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- SIGNATURE OF TY COON, 1 April 1989 +- Ty Coon, President of Vice ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. For more information on this, and how to apply and follow ++the GNU GPL, see `http://www.gnu.org/licenses/'. + +- This General Public License does not permit incorporating your ++ The GNU General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the +-GNU Lesser General Public License instead of this License. ++GNU Lesser General Public License instead of this License. But first, ++please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + +diff -urN gpc-20060325/p/COPYING.DEMO gpc-20070904/p/COPYING.DEMO +--- gpc-20060325/p/COPYING.DEMO 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/COPYING.DEMO 2007-09-04 08:22:55.000000000 +0200 +@@ -16,7 +16,7 @@ + + This demo program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +-published by the Free Software Foundation; either version 2, or (at ++published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This demo program is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/ChangeLog gpc-20070904/p/ChangeLog +--- gpc-20060325/p/ChangeLog 2006-03-24 02:47:15.000000000 +0100 ++++ gpc-20070904/p/ChangeLog 2007-09-04 08:22:53.000000000 +0200 +@@ -1,5 +1,156 @@ + ChangeLog -- Edit History for GPC, the GNU Pascal Compiler, since version 2.1 + ============================================================================= ++2007-09-04 Waldek Hebisch ++ ++ * utils/gpidump.pas: Skip version check for 4.x backends. ++ ++2007-09-04 Waldek Hebisch ++ ++ Bump version. ++ ++2007-09-04 Waldek Hebisch ++ Frank Heckenbach ++ ++ * diffs/*: Update diffs. ++ config.lang.in: Adjust. ++ ++2007-09-03 Frank Heckenbach ++ ++ * statements.c: assign_string2(): Save the whole string ++ before copying (to prevent multiple evaluation). ++ ++2007-09-03 Waldek Hebisch ++ ++ * expressions.c: convert_and_check(): For range checking ++ convert enumerations to integers. ++ ++2007-09-03 Waldek Hebisch ++ ++ * declarations.c: declare_variables(): when initializing ++ local static variables explicitly check for nested ++ functions. ++ ++2007-09-03 Waldek Hebisch ++ ++ * types.c: count_unsigned_bits(): For non-constants use ++ counts_bits on type (fixes range2.pas and chuck6.pas). ++ ++2007-09-02 Waldek Hebisch ++ ++ * predef.c: build_predef_call(): pass 2 as nonconvert to ++ build_unary_op to allow function values as copy source. ++ ++2007-08-31 Waldek Hebisch ++ ++ * plant.c: plant_continue_loop(), plant_exit_loop(): Do not ++ ICE, just signal error when outside a loop. ++ ++2007-08-31 Adriaan van Os ++ ++ * rts/Makefile.in: Add support for building libgpc as Mach ++ shared library. ++ ++2007-08-31 Frank Heckenbach ++ ++ * rts/init.pas: Mark GPC_Initialize as user routine. ++ * rts/error.pas: Rename Finalize to GPC_Finalize. Mark it ++ as user routine. ++ ++2007-08-31 Frank Heckenbach ++ ++ * predef.c: get_string_length_plus_1(): New function. ++ build_predef_call(): Use it. Add better warnings for ++ string comparisons. ++ ++2007-08-30 Waldek Hebisch ++ ++ * declarations.c: type_attributes(): Use TYPE_READONLY. ++ ++2007-08-30 Waldek Hebisch ++ ++ * declarations.c: check_identifier(): Make sure that ++ initializers are unshared (igor2.pas). ++ ++2007-08-30 Waldek Hebisch ++ ++ * declarations.c: pascal_expand_goto(): use iso_goto_restrictions ++ * gpc.c: cpp_unique_options: add -quiet when needed. ++ ++2007-08-30 Waldek Hebisch ++ ++ Added 4.1 changes. ++ * diffs/gcc-4.1.1.diff: New file. ++ * config-lang.in: Handle 4.1 diff, adjust messages. ++ * gpc.h, expressions.c, statements.c, typecheck.c: Fix 4.1 ++ problems with string initializers. ++ ++2006-08-02 Frank Heckenbach ++ ++ * declarations.c: type_attributes(): handle `volatile' ++ attribute ++ ++ * objects.c: finish_object_type(): for abstract objects ++ set NegatedSize to -1 ++ ++2006-07-22 Waldek Hebisch ++ ++ * rts/fname.pas, rts/string1.pas, rts/string2.pas: put each ++ string parameter into separate section ++ ++ * typecheck.c: build_discriminated_schema_type (): do not ++ call `check_pascal_initializer' ++ ++ * predef.c: build_predef_call (): skip dialect check on ++ procedure name ++ ++ * statements.c: pascal_expand_asm_operands (): allow `asm' ++ in any dialects (if the `asm' keyword is enabled) ++ ++2006-07-15 Waldek Hebisch ++ ++ * plant.c: plant_asm_operands (): handle volatile attribute ++ plant_asm (): add implementation ++ ++2006-05-19 Frank Heckenbach ++ ++ * gpc.h: correct conditional check for including "parse.h" ++ (recent Bison versions output tokens as enum values, not ++ as #defines anymore) ++ ++ * parse.y: move most of the first section of C code below ++ the token declarations, so it doesn't appear in parse.h ++ with Bison 2.2, as it is parser-private stuff which would ++ cause some unused-warnings otherwise; correct "%expect-rr" ++ number as Bison 2.2 gives errors instead of warnings on ++ mismatch ++ ++ * utils/mk-t-inc: minor portability fix (some sed versions ++ require ";" before "}") ++ ++2006-05-05 Frank Heckenbach ++ ++ * gpc-options.h: make `-frange-and-object-checking' into a ++ default option (fixes gale12[a-h].pas) ++ ++2006-04-24 Waldek Hebisch ++ ++ * rts/string2.pas: InternalStringOf (): handle empty string ++ ++2006-04-12 Adriaan van Os ++ ++ * gpc.c: update for gcc-4.1 ++ ++2006-03-24 Waldek Hebisch ++ ++ * Make-lang.in, config-lang.in, declarations.c, expressions.c, ++ gbe.h, gpc-lex.c, gpc.c, gpc.h, lang.c, module.c, objects.c, ++ options.c, opts.sum, p-tree.def, parse.y, pascal-lex.l, ++ predef.c, statements.c, typecheck.c, types.c, utils/Makefile ++ utils/gpidump.pas, utils/mk-t-inc: adapted to gcc-4.0, ++ schema changed to use placeholders ++ plant.c, plant.h, diffs/gcc-4.0.2.diff, diffs/gcc-4.0.3.diff: ++ new files ++ + 2006-03-09 Waldek Hebisch + + * predef.c: build_predef_call (): handle named exit from a method +diff -urN gpc-20060325/p/FAQ gpc-20070904/p/FAQ +--- gpc-20060325/p/FAQ 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/FAQ 2007-09-04 08:22:55.000000000 +0200 +@@ -62,7 +62,7 @@ + What is the current version? + ============================ + +-The current version is 20060215. ++The current version is 20070904. + + Releases are available as a source archive and precompiled binaries + for several common platforms from the GPC web site, +diff -urN gpc-20060325/p/Make-lang.in gpc-20070904/p/Make-lang.in +--- gpc-20060325/p/Make-lang.in 2006-03-25 04:33:50.000000000 +0100 ++++ gpc-20070904/p/Make-lang.in 2007-09-04 08:53:20.000000000 +0200 +@@ -13,7 +13,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -56,6 +56,7 @@ + # `40' for gcc-4.x + GPC_GCC_2_=2 + GPC_GCC_28_=8 ++GPC_GCC_28_PPQ=$(GPC_GCC_28_$(gcc_version)$(BACKEND) + GPC_GCC_34_PPQ_=foo + GPC_GCC_34_PPP=$(GPC_GCC_34_PPQ_$(target_noncanonical)) + GPC_GCC_34_PP_=34 +@@ -65,7 +66,7 @@ + GPC_GCC_40_PP_=40 + GPC_GCC_40_PP_fallback_to_34=$(GPC_GCC_34_) + GPC_GCC_40_=$(GPC_GCC_40_PP_$(GPC_GCC_40_PPP)) +-GCC_VERSION_FOR_GPC=$(GPC_GCC_2_$(BACKEND))$(GPC_GCC_28_$(gcc_version)) ++GCC_VERSION_FOR_GPC=$(GPC_GCC_2_$(BACKEND))$(GPC_GCC_28_PPQ) + GCC_VERSION_FOR_GPC34=$(GCC_VERSION_FOR_GPC)$(GPC_GCC_34_) + GCC_VERSION_FOR_GPC40=$(GCC_VERSION_FOR_GPC)$(GPC_GCC_40_) + GPC_GCC_VERSION_28=$(version) +@@ -631,7 +632,7 @@ + s: version.o::g;' "$<" > "$@" || { rm -f "$@"; false; } + + gpc1$(exeext): $(P) $(GPC_GCC_VERSION_DEPS) $(GPC_OBJS) $(LIBDEPS) +- @grep "@@ PATCHED FOR GPC 20060322 @@" $(srcdir)/stor-layout.c > /dev/null || \ ++ @grep "@@ PATCHED FOR GPC 20070903 @@" $(srcdir)/stor-layout.c > /dev/null || \ + { echo "*** There have been changes in the patch for GCC. Please start with a fresh"; \ + echo "*** copy of the GCC sources and do a new build, including configure."; \ + exit 1; } >&2 +@@ -733,7 +734,9 @@ + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + + p/version.o: version.c $(GPC_BE_H) +- $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< ++ $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) \ ++ -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \ ++ -DDEVPHASE=$(DEVPHASE_s) $< + + $(srcdir)/p/pascal-lex.c: $(srcdir)/p/pascal-lex.l + if $(GPC_LEX) --version | grep -q '2\.5\.4'; then \ +diff -urN gpc-20060325/p/Make-lang.in~ gpc-20070904/p/Make-lang.in~ +--- gpc-20060325/p/Make-lang.in~ 2006-03-25 01:43:44.000000000 +0100 ++++ gpc-20070904/p/Make-lang.in~ 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -56,6 +56,7 @@ + # `40' for gcc-4.x + GPC_GCC_2_=2 + GPC_GCC_28_=8 ++GPC_GCC_28_PPQ=$(GPC_GCC_28_$(gcc_version)$(BACKEND) + GPC_GCC_34_PPQ_=foo + GPC_GCC_34_PPP=$(GPC_GCC_34_PPQ_$(target_noncanonical)) + GPC_GCC_34_PP_=34 +@@ -65,7 +66,7 @@ + GPC_GCC_40_PP_=40 + GPC_GCC_40_PP_fallback_to_34=$(GPC_GCC_34_) + GPC_GCC_40_=$(GPC_GCC_40_PP_$(GPC_GCC_40_PPP)) +-GCC_VERSION_FOR_GPC=$(GPC_GCC_2_$(BACKEND))$(GPC_GCC_28_$(gcc_version)) ++GCC_VERSION_FOR_GPC=$(GPC_GCC_2_$(BACKEND))$(GPC_GCC_28_PPQ) + GCC_VERSION_FOR_GPC34=$(GCC_VERSION_FOR_GPC)$(GPC_GCC_34_) + GCC_VERSION_FOR_GPC40=$(GCC_VERSION_FOR_GPC)$(GPC_GCC_40_) + GPC_GCC_VERSION_28=$(version) +@@ -631,7 +632,7 @@ + s: version.o::g;' "$<" > "$@" || { rm -f "$@"; false; } + + gpc1$(exeext): $(P) $(GPC_GCC_VERSION_DEPS) $(GPC_OBJS) $(LIBDEPS) +- @grep "@@ PATCHED FOR GPC 20051114 @@" $(srcdir)/stor-layout.c > /dev/null || \ ++ @grep "@@ PATCHED FOR GPC 20060322 @@" $(srcdir)/stor-layout.c > /dev/null || \ + { echo "*** There have been changes in the patch for GCC. Please start with a fresh"; \ + echo "*** copy of the GCC sources and do a new build, including configure."; \ + exit 1; } >&2 +@@ -733,7 +734,9 @@ + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + + p/version.o: version.c $(GPC_BE_H) +- $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< ++ $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) \ ++ -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \ ++ -DDEVPHASE=$(DEVPHASE_s) $< + + $(srcdir)/p/pascal-lex.c: $(srcdir)/p/pascal-lex.l + if $(GPC_LEX) --version | grep -q '2\.5\.4'; then \ +diff -urN gpc-20060325/p/NEWS gpc-20070904/p/NEWS +--- gpc-20060325/p/NEWS 2006-03-25 03:26:49.000000000 +0100 ++++ gpc-20070904/p/NEWS 2007-09-04 08:22:55.000000000 +0200 +@@ -16,6 +16,19 @@ + to minor problems with old code, but we suppose they're rare and easy + to overcome. Backward-incompatible changes are marked with `(@)'. + ++ * support building libgpc as Mach shared library ++ ++ * `GPC_Initialize' and `GPC_Finalize' available as user routines (to ++ help building shared libraries) ++ ++ * better warnings for unexpected results of string comparisons ++ ++ * handle `volatile' attribute on types ++ ++ * allow `asm' in any dialect (if the `asm' keyword is enabled) ++ ++ * support for gcc-4.1.x ++ + * preliminary support for gcc-4.0.x + + * handle named exit from a method +diff -urN gpc-20060325/p/README gpc-20070904/p/README +--- gpc-20060325/p/README 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/README 2007-09-04 08:22:55.000000000 +0200 +@@ -137,7 +137,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the +-Free Software Foundation; either version 2, or (at your option) any ++Free Software Foundation; either version 3, or (at your option) any + later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/config-lang.in gpc-20070904/p/config-lang.in +--- gpc-20060325/p/config-lang.in 2006-03-25 03:50:32.000000000 +0100 ++++ gpc-20070904/p/config-lang.in 2007-09-04 08:22:53.000000000 +0200 +@@ -9,7 +9,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -80,13 +80,16 @@ + echo "*** Detected GCC version $mainversion." >&2 + if echo $version | grep '^4\.[1-9]' > /dev/null; then + echo '#define GCC_4_1' >> "$gcc_version_h" +- +- echo "*** The GPC port for GCC > 4.0.x does not work." >&2 +- echo "*** You can proceed now if you want to work on it." >&2 +- echo "***" >&2 ++ fi ++ if echo $version | grep '^4\.[2-9]' > /dev/null; then ++ echo '#define GCC_4_2' >> "$gcc_version_h" ++ echo "*** The GPC port for GCC > 4.1.x does not work." >&2 ++ echo "*** You can proceed now if you want to work on it." >&2 ++ echo "***" >&2 + else +- echo "*** The GPC port for GCC 4.0.x is still in an early state." >&2 +- echo "*** You can proceed now if you want to test it." >&2 ++ echo "*** The GPC port for GCC 4.x.x is less tested than" >&2 ++ echo "*** older versions." >&2 ++ echo "*** You can proceed now if you want to use it." >&2 + fi + echo "*** For a \"production compiler\" we currently still" >&2 + echo "*** recommend GPC based on gcc 3.3.x or gcc 3.4.x" >&2 +@@ -132,8 +135,11 @@ + if [ ! -r "$srcdir/p/diffs/gcc-3.4.6.diff" ]; then + (cd "$srcdir/p/diffs"; ln -s "gcc-3.4.4.diff" "gcc-3.4.6.diff") + fi ++if [ ! -r "$srcdir/p/diffs/gcc-4.1.2.diff" ]; then ++ (cd "$srcdir/p/diffs"; ln -s "gcc-4.1.1.diff" "gcc-4.1.2.diff") ++fi + +-if grep "@@ PATCHED FOR GPC 20060322 @@" "$srcdir/stor-layout.c" > /dev/null; then ++if grep "@@ PATCHED FOR GPC 20070903 @@" "$srcdir/stor-layout.c" > /dev/null; then + : + elif grep "@@ PATCHED FOR GPC" "$srcdir/stor-layout.c" > /dev/null; then + echo "" >&2 +diff -urN gpc-20060325/p/config-lang.in~ gpc-20070904/p/config-lang.in~ +--- gpc-20060325/p/config-lang.in~ 2006-03-25 03:02:46.000000000 +0100 ++++ gpc-20070904/p/config-lang.in~ 1970-01-01 01:00:00.000000000 +0100 +@@ -1,181 +0,0 @@ +-# Top level configure fragment for GNU Pascal. +-# +-# Copyright (C) 1994-2005 Free Software Foundation, Inc. +-# +-# Authors: Peter Gerwinski +-# Frank Heckenbach +-# +-# This file is part of GNU Pascal. +-# +-# GNU Pascal is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) +-# any later version. +-# +-# GNU Pascal is distributed in the hope that it will be useful, +-# but WITHOUT 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 +-# along with GNU Pascal; see the file COPYING. If not, write to +-# the Free Software Foundation, 59 Temple Place - Suite 330, +-# Boston, MA 02111-1307, USA. +- +-# Parameters used by configure: +-language="pascal" +-compilers="gpc1\$(exeext)" +-stagestuff="gpc\$(exeext) gpc-cross\$(exeext) gpc1\$(exeext) gpcpp\$(exeext) libgpc.a" +-gtfiles="\$(srcdir)/p/gpc.h \$(srcdir)/p/declarations.c \$(srcdir)/p/module.c \$(srcdir)/p/predef.c \$(srcdir)/p/plant.c" +- +-#echo "in p/config-lang.in" +-#echo "srcdir=$srcdir" +-#echo "pwd=`pwd`" +- +-( +-if [ -f "$srcdir/version.c" ]; then +- MY_SRCDIR="$srcdir" +- gcc_version_h="gcc-version.h" +-else +- MY_SRCDIR="$srcdir/gcc" +- gcc_version_h="gcc/gcc-version.h" +- [ -d gcc ] || mkdir gcc +-fi +- +-# Check if running first time +-if [ -r "$gcc_version_h" ]; then +-# echo "Not first time" +- exit +-fi +-#echo "First time" +- +-srcdir="$MY_SRCDIR" +- +-if [ -r "$srcdir/BASE-VER" ]; then +- version=`cat "$srcdir/BASE-VER"` +-else +- version=`grep version_string "$srcdir/version.c" | sed -e 's/[^"]*"//;s/[ "].*//'` +-fi +- +-mainversion="$version" +-gcc281=y +-gcc3=n +-if echo $version | grep '^2\.9' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then +- gcc281=n +- echo '#define EGCS' > "$gcc_version_h" +- if echo $version | grep '^2\.95\.[3-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then +- echo '#define GCC_2_95_3' >> "$gcc_version_h" +- fi +- if echo $version | grep '^2\.9[6-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then +- gcc3=y +- echo '#define EGCS97' >> "$gcc_version_h" +- if echo $version | grep '^3\.[3-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then +- echo '#define GCC_3_3' >> "$gcc_version_h" +- if echo $version | grep '^3\.[4-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then +- echo '#define GCC_3_4' >> "$gcc_version_h" +- if echo $version | grep '^4\.[0-9]' > /dev/null; then +- echo '#define GCC_4_0' >> "$gcc_version_h" +- echo "" >&2 +- echo "***" >&2 +- echo "*** Detected GCC version $mainversion." >&2 +- if echo $version | grep '^4\.[1-9]' > /dev/null; then +- echo '#define GCC_4_1' >> "$gcc_version_h" +- +- echo "*** The GPC port for GCC > 4.0.x does not work." >&2 +- echo "*** You can proceed now if you want to work on it." >&2 +- echo "***" >&2 +- else +- echo "*** The GPC port for GCC 4.0.x is still in an early state." >&2 +- echo "*** You can proceed now if you want to test it." >&2 +- fi +- echo "*** For a \"production compiler\" we currently still" >&2 +- echo "*** recommend GPC based on gcc 3.3.x or gcc 3.4.x" >&2 +- echo "***" >&2 +- echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 +- echo "***" >&2 +- read junk +- fi +- fi +- fi +- fi +-else +- echo "/* empty */" > "$gcc_version_h" +-fi +- +-if echo $version | grep '^2\.[89]' > /dev/null || echo $version | grep '^3\.[1-2]' > /dev/null; then +- echo "*** Detected GCC version $mainversion." >&2 +- echo "*** Using GPC with 2.x or 3.2.x backends is depreciated." >&2 +- echo "*** In the future support for those backends will be dropped." >&2 +- echo "*** We encourage you to try GPC based on gcc 3.3.x or gcc 3.4.x" >&2 +- echo "***" >&2 +- echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 +- echo "***" >&2 +- read junk +-fi +- +-for x in 2.95.1 2.95.2 2.95.3 2.95.3-5 2.95.3-6 2.95.3-8 2.95.4; do +- if [ ! -r "$srcdir/p/diffs/gcc-$x.diff" ]; then +- (cd "$srcdir/p/diffs"; ln -s "gcc-2.95.diff" "gcc-$x.diff") +- fi +-done +-for x in 3.2.2 3.2.3; do +- if [ ! -r "$srcdir/p/diffs/gcc-$x.diff" ]; then +- (cd "$srcdir/p/diffs"; ln -s "gcc-3.2.1.diff" "gcc-$x.diff") +- fi +-done +-if [ ! -r "$srcdir/p/diffs/gcc-3.3.6.diff" ]; then +- (cd "$srcdir/p/diffs"; ln -s "gcc-3.3.5.diff" "gcc-3.3.6.diff") +-fi +-if [ ! -r "$srcdir/p/diffs/gcc-3.4.5.diff" ]; then +- (cd "$srcdir/p/diffs"; ln -s "gcc-3.4.4.diff" "gcc-3.4.5.diff") +-fi +- +-if grep "@@ PATCHED FOR GPC 20051114 @@" "$srcdir/stor-layout.c" > /dev/null; then +- : +-elif grep "@@ PATCHED FOR GPC" "$srcdir/stor-layout.c" > /dev/null; then +- echo "" >&2 +- echo "*** There have been changes in the patch for GCC." >&2 +- echo "*** Please start with a fresh copy of the GCC sources and run configure again." >&2 +- echo "" >&2 +- exit 1 +-else +- patchfile="p/diffs/gcc-$mainversion.diff" +- if [ ! -r "$srcdir/$patchfile" ]; then +- echo "" >&2 +- echo "***" >&2 +- echo "*** Detected GCC version $mainversion." >&2 +- echo "*** This version of GPC requires one of the following versions of the GCC" >&2 +- echo "*** sources to build:" >&2 +- echo "***" >&2 +- ls "$srcdir"/p/diffs/gcc-*.diff | sed -e 's/^.*\/p\/diffs\/gcc-/*** /' -e 's/\.diff//' >&2 +- echo "***" >&2 +- echo "*** (You can try to patch GCC manually by changing to the directory" >&2 +- echo "*** `cd "$srcdir"; pwd`," >&2 +- echo "*** typing a command like \`patch -p1 < p/diffs/gcc-.diff' and patching" >&2 +- echo "*** possible rejects by hand before you run the configure script again.)" >&2 +- echo "***" >&2 +- echo >&2 +- exit 1 +- fi +- echo "" >&2 +- echo "***" >&2 +- echo "*** Detected GCC version $mainversion." >&2 +- echo "*** This version of GPC requires a patch to GCC to build with" >&2 +- echo "*** GCC version $mainversion." >&2 +- echo "*** This patch will now be applied." >&2 +- echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 +- echo "***" >&2 +- read junk +- if [ $gcc281 = y ]; then +- (cd "$srcdir"; patch -s -p1 < "$patchfile" || exit 1) +- else +- (cd "$srcdir/.."; patch -s -p0 < "gcc/$patchfile" || exit 1) +- fi +- # gcc-2's configure expects this. Since it's already running, patching it +- # will not stop it from requiring it (only for future runs). +- if [ $gcc3 = n ] && [ ! -r "$srcdir/p/Makefile.in" ]; then +- echo "*** Creating dummy $srcdir/p/Makefile.in" +- echo "# empty" > "$srcdir/p/Makefile.in" +- fi +-fi +-) || exit 1 +diff -urN gpc-20060325/p/declarations.c gpc-20070904/p/declarations.c +--- gpc-20060325/p/declarations.c 2006-03-13 01:33:16.000000000 +0100 ++++ gpc-20070904/p/declarations.c 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -437,7 +437,11 @@ + /* Clear out the local identifier meanings of this level. */ + for (t = decls; t; t = TREE_CHAIN (t)) + if (DECL_NAME (t)) +- IDENTIFIER_VALUE (DECL_NAME (t)) = NULL_TREE; ++ { ++ if (DECL_EXTERNAL (t) && TREE_ADDRESSABLE (t)) ++ TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (t)) = 1; ++ IDENTIFIER_VALUE (DECL_NAME (t)) = NULL_TREE; ++ } + restore_identifiers (level->shadowed); + + /* Not sure if this is a fix or work-around: Remove local external +@@ -527,7 +531,7 @@ + if (co->pascal_dialect & C_E_O_PASCAL) + error (msg2, IDENTIFIER_NAME (name)); + else +- warning (msg2, IDENTIFIER_NAME (name)); ++ gpc_warning (msg2, IDENTIFIER_NAME (name)); + } + check_id_redeclaration (name, msg1); + } +@@ -903,7 +907,7 @@ + if (TYPE_LANG_CODE_TEST (inner_type, PASCAL_LANG_ABSTRACT_OBJECT)) + error ("abstract object type declared as value parameter"); + else if (co->warn_object_assignment) +- warning ("object type declared as value parameter"); ++ gpc_warning ("object type declared as value parameter"); + } + } + for (decl = parms; decl; decl = TREE_CHAIN (decl)) +@@ -988,10 +992,11 @@ + && TREE_STRING_LENGTH (x) == TREE_STRING_LENGTH (y) + && !memcmp (TREE_STRING_POINTER (x), TREE_STRING_POINTER (y), TREE_STRING_LENGTH (x))) + return 1; +- if (TREE_CODE (x) == CONSTRUCTOR ++ if (TREE_CODE (x) == PASCAL_SET_CONSTRUCTOR + && TREE_CODE (TREE_TYPE (x)) == SET_TYPE && TREE_CODE (TREE_TYPE (x)) == SET_TYPE + && comptypes (TREE_TYPE (x), TREE_TYPE (y)) +- && const_set_constructor_binary_op (EQ_EXPR, CONSTRUCTOR_ELTS (x), CONSTRUCTOR_ELTS (y)) == boolean_true_node) ++ && const_set_constructor_binary_op (EQ_EXPR, SET_CONSTRUCTOR_ELTS (x), ++ SET_CONSTRUCTOR_ELTS (y)) == boolean_true_node) + return 1; + + return 0; +@@ -1055,7 +1060,7 @@ + DECL_CONTEXT (x) = NULL_TREE; + + if (co->warn_local_external && DECL_EXTERNAL (x) && !DECL_ARTIFICIAL (x) && !pascal_global_bindings_p ()) +- warning ("local external declaration of `%s'", IDENTIFIER_NAME (name)); ++ gpc_warning ("local external declaration of `%s'", IDENTIFIER_NAME (name)); + + t = lookup_name_current_level (name); + /* Overloading an operator is ok. The decl is a dummy placeholder. +@@ -1126,10 +1131,18 @@ + } + + DECL_UID (x) = DECL_UID (t); ++ gcc_assert (TREE_CODE (x) == FUNCTION_DECL && ++ TREE_CODE (t) == FUNCTION_DECL); ++#ifndef GCC_4_1 + /* Copy decl-specific fields of x into t. */ + memcpy ((char *) t + sizeof (struct tree_common), + (char *) x + sizeof (struct tree_common), + sizeof (struct tree_decl) - sizeof (struct tree_common)); ++#else ++ memcpy ((char *) t + sizeof (struct tree_common), ++ (char *) x + sizeof (struct tree_common), ++ tree_size (t) - sizeof (struct tree_common)); ++#endif + return t; + } + +@@ -1173,7 +1186,7 @@ + + /* Maybe warn if shadowing something else (not for vars made for inlining). */ + if (!weak && t && warn_shadow && !DECL_FROM_INLINE (x)) +- warning ("declaration of `%s' shadows an outer declaration", IDENTIFIER_NAME (name)); ++ gpc_warning ("declaration of `%s' shadows an outer declaration", IDENTIFIER_NAME (name)); + + /* Record a shadowed declaration for later restoration. */ + if (!weak && t) +@@ -1274,7 +1287,6 @@ + { + tree label = pushdecl (build_decl (LABEL_DECL, id, void_type_node)); + gcc_assert (!EM (label)); +-// fprintf(stderr, "declare_label\n"); + if (!current_function_decl || co->longjmp_all_nonlocal_labels) + /* Create a jmp_buf variable for non-local gotos to this label. + `jmp_buf' is in fact `unsigned[5]' (see ../builtins.c). */ +@@ -1284,16 +1296,12 @@ + build_index_type (build_int_2 (5, 0)))); + DECL_LANG_LABEL_JMPBUF (label) = d; + TREE_SIDE_EFFECTS (d) = TREE_THIS_VOLATILE (d) = 1; +-// fprintf(stderr, "make_new_variable: jmpbuf\n"); + } + else + { + #ifndef GCC_4_0 + label_rtx (label); + declare_nonlocal_label (label); +-#else +-// fprintf(stderr, "declare_nonlocal_label\n"); +- // gcc_assert (0); + #endif + } + return label; +@@ -1358,7 +1366,8 @@ + if (!b) + { + if (PASCAL_LABEL_SET (decl)) +- error_or_warning (pedantic || !(co->pascal_dialect & B_D_PASCAL), "`goto' to invalid target"); ++ error_or_warning (pedantic || co->iso_goto_restrictions, ++ "`goto' to invalid target"); + else + { + #ifndef EGCS97 +@@ -1372,7 +1381,8 @@ + } + } + } +-#ifndef GCC_4_0 ++#if 0 ++ /* ndef GCC_4_0 */ + if (DECL_RTL_SET_P (decl)) + #else + if (DECL_CONTEXT (decl) == current_function_decl +@@ -1384,6 +1394,7 @@ + expand_expr_stmt (build_routine_call (longjmp_routine_node, + tree_cons (NULL_TREE, build_unary_op (ADDR_EXPR, DECL_LANG_LABEL_JMPBUF (decl), 0), + build_tree_list (NULL_TREE, integer_one_node)))); ++ TREE_USED (DECL_LANG_LABEL_JMPBUF (decl)) = 1; + #ifndef GCC_3_3 + /* @@ Work-around: `function_cannot_inline_p' should check `current_function_calls_longjmp'. */ + current_function_has_nonlocal_goto = 1; +@@ -1433,10 +1444,7 @@ + #endif + /* Avoid calling `setjmp' for labels that are only used locally */ + if (DECL_LANG_LABEL_JMPBUF (d) +-#ifndef GCC_4_0 +- && TREE_USED (DECL_LANG_LABEL_JMPBUF (d)) +-#endif +- ) ++ && TREE_USED (DECL_LANG_LABEL_JMPBUF (d))) + { + expand_start_cond (build_routine_call (setjmp_routine_node, + build_tree_list (NULL_TREE, build_unary_op (ADDR_EXPR, DECL_LANG_LABEL_JMPBUF (d), 0))), 0); +@@ -1580,10 +1588,10 @@ + location_t loc_aux; + loc_aux.file = filename; + loc_aux.line = line; +- warning ("%Hcapitalisation of identifier `%s' doesn't match", &loc_aux, spelling); ++ gpc_warning ("%Hcapitalisation of identifier `%s' doesn't match", &loc_aux, spelling); + loc_aux.file = IDENTIFIER_SPELLING_FILE (id); + loc_aux.line = IDENTIFIER_SPELLING_LINENO (id); +- warning ("%H previous capitalisation `%s'", &loc_aux, IDENTIFIER_SPELLING (id)); ++ gpc_warning ("%H previous capitalisation `%s'", &loc_aux, IDENTIFIER_SPELLING (id)); + #endif + } + } +@@ -1730,6 +1738,9 @@ + { + gcc_assert (DECL_INITIAL (decl)); + decl = DECL_INITIAL (decl); ++#ifdef GCC_4_0 ++ decl = unshare_expr (decl); ++#endif + } + /* Set DECL_NONLOCAL if var is inherited in local routine (not for CONST_DECLs). */ + else if (DECL_P (decl) && DECL_CONTEXT (decl) && DECL_CONTEXT (decl) != current_function_decl) +@@ -2306,7 +2317,7 @@ + if (co->pascal_dialect & C_E_O_PASCAL) + error (msg, IDENTIFIER_NAME (name)); + else +- warning (msg, IDENTIFIER_NAME (name)); ++ gpc_warning (msg, IDENTIFIER_NAME (name)); + } + } + +@@ -2523,6 +2534,13 @@ + PASCAL_TYPE_IOCRITICAL (TREE_TYPE (*d)) = 1; + *tt = TREE_CHAIN (*tt); + } ++ else if (IDENTIFIER_IS_BUILT_IN (TREE_PURPOSE (*tt), p_volatile)) ++ { ++ if (TREE_VALUE (*tt)) ++ error ("spurious argument to `%s' attribute", IDENTIFIER_NAME (TREE_PURPOSE (*tt))); ++ *d = p_build_type_variant (*d, TYPE_READONLY (*d), 1); ++ *tt = TREE_CHAIN (*tt); ++ } + else + tt = &TREE_CHAIN (*tt); + if ((TREE_CODE (*d) == POINTER_TYPE || TREE_CODE (*d) == REFERENCE_TYPE) +@@ -2562,7 +2580,7 @@ + if (TREE_VALUE (*tt)) + error ("spurious argument to `%s' attribute", IDENTIFIER_NAME (TREE_PURPOSE (*tt))); + if (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE) +- warning ("`%s' is meaningless for a procedure", IDENTIFIER_NAME (TREE_PURPOSE (*tt))); ++ gpc_warning ("`%s' is meaningless for a procedure", IDENTIFIER_NAME (TREE_PURPOSE (*tt))); + else + PASCAL_TREE_IGNORABLE (t) = 1; + *tt = TREE_CHAIN (*tt); +@@ -2576,7 +2594,7 @@ + if (TREE_VALUE (*tt)) + error ("spurious argument to `%s' attribute", IDENTIFIER_NAME (TREE_PURPOSE (*tt))); + if (!last || TREE_CODE (TREE_VALUE (last)) != VOID_TYPE) +- warning ("inline declaration ignored for routine with `...'"); ++ gpc_warning ("inline declaration ignored for routine with `...'"); + else if (!flag_no_inline && optimize > 0) + /* Assume that otherwise the function can be inlined. */ + DECL_INLINE (*d) = 1; +@@ -2646,7 +2664,7 @@ + } + else if (IDENTIFIER_IS_BUILT_IN (TREE_VALUE (dir), p_asmname)) + { +- warning ("`%s' is deprecated; use `external name' or `attribute (name = ...)' instead", ++ gpc_warning ("`%s' is deprecated; use `external name' or `attribute (name = ...)' instead", + IDENTIFIER_NAME (TREE_VALUE (dir))); + assembler_name = TREE_PURPOSE (dir); + any_dir = 1; +@@ -2654,7 +2672,7 @@ + else if (IDENTIFIER_IS_BUILT_IN (TREE_VALUE (dir), p_c) + || IDENTIFIER_IS_BUILT_IN (TREE_VALUE (dir), p_c_language)) + { +- warning ("`%s' is deprecated; use `external' instead", ++ gpc_warning ("`%s' is deprecated; use `external' instead", + IDENTIFIER_NAME (TREE_VALUE (dir))); + any_dir = c_dir = is_public = 1; + } +@@ -2662,7 +2680,7 @@ + { + is_external = is_public = 1; + if (TREE_PURPOSE (dir)) +- warning ("library name in `external' is ignored"); ++ gpc_warning ("library name in `external' is ignored"); + } + else if (IDENTIFIER_IS_BUILT_IN (TREE_VALUE (dir), p_forward)) + any_dir = is_forward = 1; +@@ -2675,15 +2693,15 @@ + || IDENTIFIER_IS_BUILT_IN (TREE_VALUE (dir), p_far)) + { + if (co->warn_near_far) +- warning ("`%s' directive ignored because of flat memory model", IDENTIFIER_NAME (TREE_VALUE (dir))); ++ gpc_warning ("`%s' directive ignored because of flat memory model", IDENTIFIER_NAME (TREE_VALUE (dir))); + } + else + error ("unknown directive `%s'", IDENTIFIER_NAME (TREE_VALUE (dir))); + + if (is_external && !assembler_name) + { +- warning ("`external' without `name' has a different default now"); +- warning (" (This warning will disappear in a future version)"); ++ gpc_warning ("`external' without `name' has a different default now"); ++ gpc_warning (" (This gpc_warning will disappear in a future version)"); + } + + is_external |= c_dir; +@@ -3016,7 +3034,7 @@ + || IDENTIFIER_IS_BUILT_IN (TREE_VALUE (dir), p_far)) + { + if (co->warn_near_far) +- warning ("`%s' directive ignored because of flat memory model", IDENTIFIER_NAME (TREE_VALUE (dir))); ++ gpc_warning ("`%s' directive ignored because of flat memory model", IDENTIFIER_NAME (TREE_VALUE (dir))); + } + else + { +@@ -3301,14 +3319,18 @@ + #ifndef EGCS97 + /* So we can tell if jump_optimize sets it to 1. */ + can_reach_end = 0; +-#else +- ggc_push_context (); + #endif + +- +- /* Run the optimizers and output the assembler code for this function. */ + #ifndef GCC_4_0 ++#ifdef EGCS97 ++ ggc_push_context (); ++#endif ++ /* Run the optimizers and output the assembler code for this function. */ + rest_of_compilation (fndecl); ++ ++#ifdef EGCS97 ++ ggc_pop_context (); ++#endif + #endif + + if (DECL_LANG_RESULT_VARIABLE (fndecl)) +@@ -3316,11 +3338,9 @@ + + #ifndef EGCS97 + if (TREE_THIS_VOLATILE (fndecl) && can_reach_end) +- warning ("routine declared `noreturn' returns"); ++ gpc_warning ("routine declared `noreturn' returns"); + if (!outer_function_chain) + permanent_allocation (1); +-#else +- ggc_pop_context (); + #endif + + #ifndef GCC_4_0 +@@ -3559,21 +3579,12 @@ + error ("restricted objects are not allowed in `with'"); + return NULL_TREE; + } +-#if 0 +- if (TREE_CODE (element) == FUNCTION_DECL && RECORD_OR_UNION (TREE_CODE (TREE_TYPE (TREE_TYPE (element))))) +- { +- tree temp_var = make_new_variable ("with_element", TREE_TYPE (TREE_TYPE (element))); +- expand_expr_stmt (build_modify_expr (temp_var, NOP_EXPR, probably_call_function (element))); +- element = temp_var; +- } +-#else + if (TREE_CODE (element) == CALL_EXPR && RECORD_OR_UNION (TREE_CODE (TREE_TYPE (element)))) + { + tree temp_var = make_new_variable ("with_element", TREE_TYPE (element)); + expand_expr_stmt (build_modify_expr (temp_var, NOP_EXPR, element)); + element = temp_var; + } +-#endif + if (TREE_CODE (TREE_TYPE (element)) == POINTER_TYPE + &&PASCAL_TYPE_CLASS (TREE_TYPE (element))) + element = build_indirect_ref (element, NULL); +@@ -3700,13 +3711,13 @@ + { + qualifiers |= VQ_EXTERNAL; + if (arg) +- warning ("library name in `external' is ignored"); ++ gpc_warning ("library name in `external' is ignored"); + } + else if (arg && IDENTIFIER_IS_BUILT_IN (id, p_name)) + assembler_name = arg; + else if (arg && IDENTIFIER_IS_BUILT_IN (id, p_asmname)) + { +- warning ("`%s' is deprecated; use `external name' or `attribute (name = ...)' instead", ++ gpc_warning ("`%s' is deprecated; use `external name' or `attribute (name = ...)' instead", + IDENTIFIER_NAME (id)); + assembler_name = arg; + } +@@ -3720,8 +3731,8 @@ + + if ((qualifiers & VQ_EXTERNAL) && !(qualifiers & VQ_IMPLICIT) && !assembler_name) + { +- warning ("`external' without `name' has a different default now"); +- warning (" (This warning will disappear in a future version.)"); ++ gpc_warning ("`external' without `name' has a different default now"); ++ gpc_warning (" (This gpc_warning will disappear in a future version.)"); + } + + if (init && PASCAL_ABSOLUTE_CLAUSE (init)) +@@ -3744,7 +3755,7 @@ + return NULL_TREE; + } + if (co->warn_absolute) +- warning ("variables at absolute adresses may cause problems"); ++ gpc_warning ("variables at absolute adresses may cause problems"); + } + else + { +@@ -3756,7 +3767,7 @@ + && TREE_CODE (TREE_TYPE (init)) != VOID_TYPE + && TREE_CODE (TREE_TYPE (init)) != FUNCTION_TYPE + && TYPE_ALIGN (type) > TYPE_ALIGN (TREE_TYPE (init))) +- warning ("`absolute' declaration increases required alignment"); ++ gpc_warning ("`absolute' declaration increases required alignment"); + while (TREE_CODE (init) == NOP_EXPR + || TREE_CODE (init) == NON_LVALUE_EXPR + || TREE_CODE (init) == CONVERT_EXPR +@@ -3770,7 +3781,7 @@ + || (indirect == 0 && TREE_CODE (init) == PARM_DECL) + || (indirect == 1 && TREE_CODE (init) == PARM_DECL + && TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE))) +- warning ("`absolute' variable has non-constant address"); ++ gpc_warning ("`absolute' variable has non-constant address"); + TREE_USED (init) = 1; + init = address; + } +@@ -3929,16 +3940,19 @@ + if (init && !value) + { + value = build_pascal_initializer (TREE_TYPE (d), init, IDENTIFIER_NAME (DECL_NAME (d)), 0); +- if (!TREE_CONSTANT (value)) ++ if (local_static) + { +- if (local_static) +- { +- error ("local static variables cannot have non-constant initializers"); +- value = NULL_TREE; +- } +- else if (TREE_CHAIN (v)) +- value = save_expr (value); ++ tree raw_value = value; ++ STRIP_NOPS (raw_value); ++ /* The second case is needed for nicola4c.pas with gcc-4.x */ ++ if (!TREE_CONSTANT (value) || ++ (TREE_CODE (raw_value) == ADDR_EXPR && ++ TREE_CODE (TREE_OPERAND (raw_value, 0)) == FUNCTION_DECL && ++ DECL_CONTEXT (TREE_OPERAND (raw_value, 0)))) ++ error ("local static variables cannot have non-constant initializers"); + } ++ if (!TREE_CONSTANT (value) && TREE_CHAIN (v)) ++ value = save_expr (value); + } + if (value) + { +@@ -3972,7 +3986,8 @@ + + if (!DECL_ARTIFICIAL (d)) + d = pushdecl (d); +-#ifdef GCC_4_0 ++#if 1 ++ /* def GCC_4_0 */ + else + pushdecl_nocheck (d); + #endif +@@ -3982,7 +3997,15 @@ + DECL_CONTEXT (d) = NULL_TREE; /* for deferred initializers */ + + /* Output the assembler code and/or RTL code. */ +-#ifndef GCC_4_0 ++#ifdef GCC_4_0 ++ if (pascal_global_bindings_p () && current_module ++ && current_module->implementation) ++ { ++ if (!DECL_INITIAL (d)) ++ DECL_DEFER_OUTPUT (d) = 1; ++ rest_of_decl_compilation (d, true, 0); ++ } ++#else + rest_of_decl_compilation (d, NULL, !DECL_CONTEXT (d), 1 /* for GPC */); + #endif + +diff -urN gpc-20060325/p/diffs/gcc-4.1.1.diff gpc-20070904/p/diffs/gcc-4.1.1.diff +--- gpc-20060325/p/diffs/gcc-4.1.1.diff 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/diffs/gcc-4.1.1.diff 2007-09-04 08:22:53.000000000 +0200 +@@ -0,0 +1,889 @@ ++Changes for GCC version 4.1.2 for GNU Pascal ++ ++To apply these diffs, go to the directory gcc-4.1.2/gcc ++and use the command ++ ++ patch -p1 ++ ++feeding it the following diffs as input. ++ ++ ++*** gcc/config/i386/i386.c Fri Nov 17 08:01:22 2006 ++--- gcc/config/i386/i386.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 2738,2743 **** ++--- 2738,2767 ---- ++ } ++ break; ++ +++ case SET_TYPE: +++ if (bytes <= 4) +++ { +++ classes[0] = X86_64_INTEGERSI_CLASS; +++ return 1; +++ } +++ else if (bytes <= 8) +++ { +++ classes[0] = X86_64_INTEGER_CLASS; +++ return 1; +++ } +++ else if (bytes <= 12) +++ { +++ classes[0] = X86_64_INTEGER_CLASS; +++ classes[1] = X86_64_INTEGERSI_CLASS; +++ return 2; +++ } +++ else +++ { +++ classes[0] = X86_64_INTEGER_CLASS; +++ classes[1] = X86_64_INTEGER_CLASS; +++ return 2; +++ } +++ ++ default: ++ gcc_unreachable (); ++ } ++*** gcc/config/ia64/ia64.c Thu Dec 21 14:06:37 2006 ++--- gcc/config/ia64/ia64.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 3842,3847 **** ++--- 3842,3848 ---- ++ case BOOLEAN_TYPE: case CHAR_TYPE: case POINTER_TYPE: ++ case OFFSET_TYPE: case REFERENCE_TYPE: case METHOD_TYPE: ++ case LANG_TYPE: case FUNCTION_TYPE: +++ case SET_TYPE: ++ return VOIDmode; ++ ++ /* Fortran complex types are supposed to be HFAs, so we need to handle ++*** gcc/config/sparc/sparc.c Fri Apr 14 09:02:43 2006 ++--- gcc/config/sparc/sparc.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 7019,7024 **** ++--- 7019,7025 ---- ++ case VECTOR_TYPE: ++ case CHAR_TYPE: /* GNU Pascal CHAR type. Not used in C. */ ++ case BOOLEAN_TYPE: /* GNU Fortran BOOLEAN type. */ +++ case SET_TYPE: /* GNU Pascal SET type. */ ++ case LANG_TYPE: /* ? */ ++ return qualifiers; ++ ++*** gcc/dbxout.c Thu Oct 6 02:47:21 2005 ++--- gcc/dbxout.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 1916,1922 **** ++ { ++ stabstr_S ("@s"); ++ stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type)); ++! stabstr_S (";-20;"); ++ } ++ else ++ { ++--- 1916,1922 ---- ++ { ++ stabstr_S ("@s"); ++ stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type)); ++! stabstr_S (";-20"); ++ } ++ else ++ { ++*************** ++*** 1933,1939 **** ++ { ++ stabstr_S ("@s"); ++ stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type)); ++! stabstr_S (";-16;"); ++ } ++ else /* Define as enumeral type (False, True) */ ++ stabstr_S ("eFalse:0,True:1,;"); ++--- 1933,1939 ---- ++ { ++ stabstr_S ("@s"); ++ stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type)); ++! stabstr_S (";-16"); ++ } ++ else /* Define as enumeral type (False, True) */ ++ stabstr_S ("eFalse:0,True:1,;"); ++*************** ++*** 1972,1977 **** ++--- 1972,1993 ---- ++ } ++ break; ++ +++ case SET_TYPE: +++ if (use_gnu_debug_info_extensions) +++ { +++ stabstr_S ("@s"); +++ stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type)); +++ stabstr_C (';'); +++ +++ /* Check if a bitstring type, which in Chill is +++ different from a [power]set. */ +++ if (TYPE_STRING_FLAG (type)) +++ stabstr_S ("@S;"); +++ } +++ stabstr_C ('S'); +++ dbxout_type (TYPE_DOMAIN (type), 0); +++ break; +++ ++ case ARRAY_TYPE: ++ /* Make arrays of packed bits look like bitstrings for chill. */ ++ if (TYPE_PACKED (type) && use_gnu_debug_info_extensions) ++*************** ++*** 2435,2441 **** ++ we see following the TREE_TYPE chain. */ ++ ++ t = type; ++! while (POINTER_TYPE_P (t)) ++ t = TREE_TYPE (t); ++ ++ /* RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, and ENUMERAL_TYPE ++--- 2451,2457 ---- ++ we see following the TREE_TYPE chain. */ ++ ++ t = type; ++! while (POINTER_TYPE_P (t) && !TYPE_NAME (t)) ++ t = TREE_TYPE (t); ++ ++ /* RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, and ENUMERAL_TYPE ++*** gcc/dwarf2out.c Wed Dec 27 23:23:55 2006 ++--- gcc/dwarf2out.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 8230,8235 **** ++--- 8230,8236 ---- ++ case OFFSET_TYPE: ++ case LANG_TYPE: ++ case VECTOR_TYPE: +++ case SET_TYPE: ++ return 0; ++ ++ default: ++*************** ++*** 9413,9418 **** ++--- 9414,9432 ---- ++ } ++ break; ++ +++ #ifdef GPC +++ case REAL_CST: +++ case FLOAT_EXPR: +++ case RDIV_EXPR: +++ case STRING_CST: +++ /* In Pascal it's possible for array bounds to contain floating point +++ expressions (e.g., p/test/emil11c.pas). I don't know if it's +++ possible to represent them in dwarf2, but it doesn't seem terribly +++ important since this occurs quite rarely. -- Frank */ +++ return 0; +++ #endif +++ +++ ++ case FIX_TRUNC_EXPR: ++ case FIX_CEIL_EXPR: ++ case FIX_FLOOR_EXPR: ++*************** ++*** 11166,11171 **** ++--- 11180,11195 ---- ++ add_type_attribute (array_die, element_type, 0, 0, context_die); ++ } ++ +++ static void +++ gen_set_type_die (tree type, dw_die_ref context_die) +++ { +++ dw_die_ref type_die +++ = new_die (DW_TAG_set_type, scope_die_for (type, context_die), type); +++ +++ equate_type_number_to_die (type, type_die); +++ add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die); +++ } +++ ++ #if 0 ++ static void ++ gen_entry_point_die (tree decl, dw_die_ref context_die) ++*************** ++*** 12523,12528 **** ++--- 12547,12557 ---- ++ gen_ptr_to_mbr_type_die (type, context_die); ++ break; ++ +++ case SET_TYPE: +++ gen_type_die (TYPE_DOMAIN (type), context_die); +++ gen_set_type_die (type, context_die); +++ break; +++ ++ case FUNCTION_TYPE: ++ /* Force out return type (in case it wasn't forced out already). */ ++ gen_type_die (TREE_TYPE (type), context_die); ++*** gcc/expr.c Thu Nov 2 18:18:52 2006 ++--- gcc/expr.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 4639,4644 **** ++--- 4639,4648 ---- ++ case REFERENCE_TYPE: ++ return 1; ++ +++ case SET_TYPE: +++ /* @@@@@@ return something more accurate ... */ +++ return -1; +++ ++ case VOID_TYPE: ++ case METHOD_TYPE: ++ case FUNCTION_TYPE: ++*************** ++*** 5592,5600 **** ++ index, then convert to sizetype and multiply by the size of ++ the array element. */ ++ if (! integer_zerop (low_bound)) ++ index = fold_build2 (MINUS_EXPR, TREE_TYPE (index), ++ index, low_bound); ++! ++ offset = size_binop (PLUS_EXPR, offset, ++ size_binop (MULT_EXPR, ++ convert (sizetype, index), ++--- 5596,5614 ---- ++ index, then convert to sizetype and multiply by the size of ++ the array element. */ ++ if (! integer_zerop (low_bound)) +++ #ifdef GPC +++ /* I think that address arithmetic should always be done on +++ sizetype or its variants -- for Pascal signed seems to be the +++ correct choice (and generates slightly better code). -- Waldek */ +++ index = convert (sizetype, convert (bitsizetype, +++ size_binop (MINUS_EXPR, +++ convert (sbitsizetype, index), +++ convert (sbitsizetype, low_bound)))); +++ #else +++ ++ index = fold_build2 (MINUS_EXPR, TREE_TYPE (index), ++ index, low_bound); ++! #endif ++ offset = size_binop (PLUS_EXPR, offset, ++ size_binop (MULT_EXPR, ++ convert (sizetype, index), ++*************** ++*** 8642,8648 **** ++ tree ++ string_constant (tree arg, tree *ptr_offset) ++ { ++! tree array, offset; ++ STRIP_NOPS (arg); ++ ++ if (TREE_CODE (arg) == ADDR_EXPR) ++--- 8656,8662 ---- ++ tree ++ string_constant (tree arg, tree *ptr_offset) ++ { ++! tree array, offset, lb = size_zero_node; ++ STRIP_NOPS (arg); ++ ++ if (TREE_CODE (arg) == ADDR_EXPR) ++*************** ++*** 8656,8661 **** ++--- 8670,8676 ---- ++ { ++ array = TREE_OPERAND (arg, 0); ++ offset = size_zero_node; +++ goto do_lb; ++ } ++ else if (TREE_CODE (TREE_OPERAND (arg, 0)) == ARRAY_REF) ++ { ++*************** ++*** 8664,8669 **** ++--- 8679,8685 ---- ++ if (TREE_CODE (array) != STRING_CST ++ && TREE_CODE (array) != VAR_DECL) ++ return 0; +++ lb = array_ref_low_bound (TREE_OPERAND (arg, 0)); ++ } ++ else ++ return 0; ++*************** ++*** 8692,8701 **** ++--- 8708,8733 ---- ++ } ++ else ++ return 0; +++ do_lb: +++ if (TREE_TYPE (array) && TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE) +++ { +++ tree domain_type = TYPE_DOMAIN (TREE_TYPE (array)); +++ if (domain_type && TYPE_MIN_VALUE (domain_type)) +++ #if 0 +++ lb = SUBSTITUTE_PLACEHOLDER_IN_EXPR ( +++ TYPE_MIN_VALUE (domain_type), array); +++ #else +++ lb = TYPE_MIN_VALUE (domain_type); +++ #endif +++ } ++ } ++ else ++ return 0; ++ +++ if (! integer_zerop (lb)) +++ offset = size_diffop (fold_convert (sizetype, offset), +++ fold_convert (sizetype, lb)); +++ ++ if (TREE_CODE (array) == STRING_CST) ++ { ++ *ptr_offset = convert (sizetype, offset); ++*** gcc/fold-const.c Wed Jan 3 09:15:24 2007 ++--- gcc/fold-const.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 5960,5965 **** ++--- 5960,5969 ---- ++ bool unsigned_p = TYPE_UNSIGNED (TREE_TYPE (arg0)); ++ int overflow; ++ +++ /* Overflow check does not work for unsigned numbers */ +++ if (TYPE_UNSIGNED (TREE_TYPE (arg0))) +++ return NULL_TREE; +++ ++ /* We have to do this the hard way to detect unsigned overflow. ++ prod = int_const_binop (MULT_EXPR, arg01, arg1, 0); */ ++ overflow = mul_double_with_sign (TREE_INT_CST_LOW (arg01), ++*** gcc/function.c Tue Nov 28 13:01:45 2006 ++--- gcc/function.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 3118,3124 **** ++--- 3118,3128 ---- ++ if (TYPE_P (t)) ++ { ++ if (POINTER_TYPE_P (t)) +++ #ifndef GPC ++ *walk_subtrees = 1; +++ #else +++ *walk_subtrees = 0; +++ #endif ++ else if (TYPE_SIZE (t) && !TREE_CONSTANT (TYPE_SIZE (t)) ++ && !TYPE_SIZES_GIMPLIFIED (t)) ++ { ++*** gcc/gcc.c Tue Nov 7 15:26:21 2006 ++--- gcc/gcc.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 794,801 **** ++ "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ ++ %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\ ++ %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}}\ ++! %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\ ++! %{v:-version} %{pg:-p} %{p} %{f*} %{undef}\ ++ %{Qn:-fno-ident} %{--help:--help}\ ++ %{--target-help:--target-help}\ ++ %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\ ++--- 794,801 ---- ++ "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ ++ %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\ ++ %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}}\ ++! %{g*} %{O*} %{f*&W*&pedantic*&w} %{std*&ansi&trigraphs}\ ++! %{v:-version} %{pg:-p} %{p} %{undef}\ ++ %{Qn:-fno-ident} %{--help:--help}\ ++ %{--target-help:--target-help}\ ++ %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\ ++*** gcc/gimplify.c Sun Nov 19 17:15:47 2006 ++--- gcc/gimplify.c Fri Aug 31 17:28:39 2007 ++*************** ++*** 2749,2754 **** ++--- 2749,2758 ---- ++ if (TREE_CODE (ctor) != CONSTRUCTOR) ++ return GS_UNHANDLED; ++ +++ ret = lang_hooks.gimplify_expr (&TREE_OPERAND (*expr_p, 1), pre_p, post_p); +++ if (ret != GS_UNHANDLED) +++ return ret; +++ ++ ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, ++ is_gimple_lvalue, fb_lvalue); ++ if (ret == GS_ERROR) ++*************** ++*** 4760,4765 **** ++--- 4764,4771 ---- ++ ++ case POINTER_TYPE: ++ case REFERENCE_TYPE: +++ break; +++ ++ gimplify_type_sizes (TREE_TYPE (type), list_p); ++ break; ++ ++*** gcc/ipa-type-escape.c Sun Sep 25 07:28:01 2005 ++--- gcc/ipa-type-escape.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 260,268 **** ++ type_to_consider (tree type) ++ { ++ /* Strip the *'s off. */ ++ type = TYPE_MAIN_VARIANT (type); ++ while (POINTER_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE) ++! type = TYPE_MAIN_VARIANT (TREE_TYPE (type)); ++ ++ switch (TREE_CODE (type)) ++ { ++--- 260,282 ---- ++ type_to_consider (tree type) ++ { ++ /* Strip the *'s off. */ +++ tree otype = type; +++ long cnt = 0; +++ long ocnt = 0; ++ type = TYPE_MAIN_VARIANT (type); ++ while (POINTER_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE) ++! { ++! type = TYPE_MAIN_VARIANT (TREE_TYPE (type)); ++! if (type == otype) ++! return false; ++! if (cnt > ocnt) ++! { ++! ocnt += cnt; ++! otype = type; ++! } ++! else ++! cnt ++; ++! } ++ ++ switch (TREE_CODE (type)) ++ { ++*** gcc/print-tree.c Thu Oct 13 01:34:09 2005 ++--- gcc/print-tree.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 580,586 **** ++ ++ if (TREE_CODE (node) == ENUMERAL_TYPE) ++ print_node (file, "values", TYPE_VALUES (node), indent + 4); ++! else if (TREE_CODE (node) == ARRAY_TYPE) ++ print_node (file, "domain", TYPE_DOMAIN (node), indent + 4); ++ else if (TREE_CODE (node) == VECTOR_TYPE) ++ fprintf (file, " nunits %d", (int) TYPE_VECTOR_SUBPARTS (node)); ++--- 580,586 ---- ++ ++ if (TREE_CODE (node) == ENUMERAL_TYPE) ++ print_node (file, "values", TYPE_VALUES (node), indent + 4); ++! else if (TREE_CODE (node) == ARRAY_TYPE || TREE_CODE (node) == SET_TYPE) ++ print_node (file, "domain", TYPE_DOMAIN (node), indent + 4); ++ else if (TREE_CODE (node) == VECTOR_TYPE) ++ fprintf (file, " nunits %d", (int) TYPE_VECTOR_SUBPARTS (node)); ++*** gcc/stor-layout.c Wed Oct 4 09:01:27 2006 ++--- gcc/stor-layout.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 19,24 **** ++--- 19,25 ---- ++ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ++ 02110-1301, USA. */ ++ +++ /* @@ PATCHED FOR GPC 20070903 @@ */ ++ ++ #include "config.h" ++ #include "system.h" ++*************** ++*** 53,58 **** ++--- 54,74 ---- ++ called only by a front end. */ ++ static int reference_types_internal = 0; ++ +++ /* If nonzero, the alignment of a bitstring or (power-)set value, in bits. +++ May be overridden by front-ends. */ +++ unsigned int set_alignment = 0; +++ +++ /* The word size of a bitstring or (power-)set value, in bits. +++ Must be non-zero. +++ May be overridden by front-ends. */ +++ unsigned int set_word_size = BITS_PER_UNIT; +++ +++ /* If non-zero, bits in (power-)sets start with the highest bit. +++ May be overridden by front-ends. +++ In order to be backward-compatible, the Chill frontend should +++ initialize this to BYTES_BIG_ENDIAN. */ +++ unsigned int set_words_big_endian = 0; +++ ++ static void finalize_record_size (record_layout_info); ++ static void finalize_type_size (tree); ++ static void place_union_field (record_layout_info, tree); ++*************** ++*** 1899,1904 **** ++--- 1915,1964 ---- ++ } ++ break; ++ +++ case SET_TYPE: /* Used by Chill and Pascal. */ +++ if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST +++ || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST) +++ abort (); +++ else +++ { +++ int alignment = set_alignment ? set_alignment : set_word_size; +++ tree lower_bound = convert (sbitsizetype, +++ TYPE_MIN_VALUE (TYPE_DOMAIN (type))); +++ tree upper_bound = convert (sbitsizetype, +++ TYPE_MAX_VALUE (TYPE_DOMAIN (type))); +++ tree size_in_bits, rounded_size; +++ if (set_alignment) +++ { +++ lower_bound = round_down (lower_bound, alignment); +++ } +++ size_in_bits = size_binop (PLUS_EXPR, +++ size_binop (MINUS_EXPR, +++ upper_bound, +++ lower_bound), +++ sbitsize_int(1)); +++ rounded_size = round_up (size_in_bits, alignment); +++ +++ if ( TREE_INT_CST_HIGH (rounded_size) +++ || TREE_INT_CST_LOW (rounded_size) > (unsigned) alignment) +++ { +++ TYPE_MODE (type) = BLKmode; +++ } +++ else +++ { +++ TYPE_MODE (type) = mode_for_size (alignment, MODE_INT, 1); +++ } +++ +++ TYPE_SIZE (type) = convert (bitsizetype, rounded_size); +++ TYPE_SIZE_UNIT (type) = convert (sizetype, +++ size_binop ( CEIL_DIV_EXPR, +++ rounded_size, +++ sbitsize_int (BITS_PER_UNIT))); +++ TYPE_ALIGN (type) = alignment; +++ TYPE_USER_ALIGN (type) = 0; +++ TYPE_PRECISION (type) = TREE_INT_CST_LOW (size_in_bits); +++ } +++ break; +++ ++ default: ++ gcc_unreachable (); ++ } ++*** gcc/toplev.c Thu Aug 3 13:33:49 2006 ++--- gcc/toplev.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 1110,1115 **** ++--- 1110,1136 ---- ++ void ++ print_version (FILE *file, const char *indent) ++ { +++ #ifdef GPC +++ extern const char *lang_version_string; +++ static const char fmt1[] = +++ #ifdef __GNUC__ +++ N_("%s%s%s version %s%s (%s)\n%s\tcompiled by GNU C version %s.\n") +++ #else +++ N_("%s%s%s version %s%s (%s) compiled by CC.\n") +++ #endif +++ ; +++ static const char fmt2[] = +++ N_("%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"); +++ #ifndef __VERSION__ +++ #define __VERSION__ "[?]" +++ #endif +++ +++ fprintf (file, +++ file == stderr ? _(fmt1) : fmt1, +++ indent, *indent != 0 ? " " : "", +++ lang_hooks.name, lang_version_string, version_string, TARGET_NAME, +++ indent, __VERSION__); +++ #else ++ static const char fmt1[] = ++ #ifdef __GNUC__ ++ N_("%s%s%s version %s (%s)\n%s\tcompiled by GNU C version %s.\n") ++*************** ++*** 1122,1132 **** ++--- 1143,1155 ---- ++ #ifndef __VERSION__ ++ #define __VERSION__ "[?]" ++ #endif +++ ++ fprintf (file, ++ file == stderr ? _(fmt1) : fmt1, ++ indent, *indent != 0 ? " " : "", ++ lang_hooks.name, version_string, TARGET_NAME, ++ indent, __VERSION__); +++ #endif ++ fprintf (file, ++ file == stderr ? _(fmt2) : fmt2, ++ indent, *indent != 0 ? " " : "", ++*** gcc/tree-flow-inline.h Tue Apr 18 15:24:45 2006 ++--- gcc/tree-flow-inline.h Fri Aug 31 17:28:40 2007 ++*************** ++*** 1470,1476 **** ++ return false; ++ ++ return (AGGREGATE_TYPE_P (TREE_TYPE (v)) && ++! TREE_CODE (TREE_TYPE (v)) != ARRAY_TYPE); ++ } ++ ++ ++--- 1470,1477 ---- ++ return false; ++ ++ return (AGGREGATE_TYPE_P (TREE_TYPE (v)) && ++! TREE_CODE (TREE_TYPE (v)) != ARRAY_TYPE ++! && TREE_CODE (TREE_TYPE (v)) != SET_TYPE); ++ } ++ ++ ++*** gcc/tree-nested.c Thu Jul 20 17:43:44 2006 ++--- gcc/tree-nested.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 1173,1178 **** ++--- 1173,1180 ---- ++ if (!elt) ++ return NULL_TREE; ++ new_label = elt->new; +++ DECL_CONTEXT (new_label) = DECL_CONTEXT (label); +++ // mark_decl_referenced (new_label); ++ ++ /* If there's any possibility that the previous statement falls through, ++ then we must branch around the new non-local label. */ ++*** gcc/tree-sra.c Mon Nov 21 01:55:57 2005 ++--- gcc/tree-sra.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 1368,1373 **** ++--- 1368,1376 ---- ++ && (!can_completely_scalarize_p (elt) ++ || !type_can_instantiate_all_elements (elt->type))) ++ use_block_copy = true; +++ if (TREE_TYPE (elt->type) +++ && full_size != full_count*TYPE_PRECISION (TREE_TYPE (elt->type))) +++ use_block_copy = true; ++ } ++ elt->use_block_copy = use_block_copy; ++ ++*** gcc/tree-ssa-dom.c Fri Nov 17 10:01:31 2006 ++--- gcc/tree-ssa-dom.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 2804,2815 **** ++ val_type = TREE_TYPE (val); ++ ++ /* While both types are pointers, get the type of the object ++! pointed to. */ ++! while (POINTER_TYPE_P (op_type) && POINTER_TYPE_P (val_type)) ++! { ++! op_type = TREE_TYPE (op_type); ++! val_type = TREE_TYPE (val_type); ++! } ++ ++ /* Make sure underlying types match before propagating a constant by ++ converting the constant to the proper type. Note that convert may ++--- 2804,2829 ---- ++ val_type = TREE_TYPE (val); ++ ++ /* While both types are pointers, get the type of the object ++! pointed to. Do not get trapped in cycles. */ ++! { ++! long cnt = 0, maxcnt = 11; ++! tree op_type0 = op_type; ++! while (POINTER_TYPE_P (op_type) && POINTER_TYPE_P (val_type)) ++! { ++! op_type = TREE_TYPE (op_type); ++! val_type = TREE_TYPE (val_type); ++! if (op_type == op_type0) ++! return false; ++! cnt ++; ++! if (cnt > maxcnt) ++! { ++! op_type0 = op_type; ++! maxcnt += maxcnt; ++! if (maxcnt < 0) ++! return false; ++! } ++! } ++! } ++ ++ /* Make sure underlying types match before propagating a constant by ++ converting the constant to the proper type. Note that convert may ++*** gcc/tree.c Fri Jan 5 21:59:15 2007 ++--- gcc/tree.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 2131,2136 **** ++--- 2131,2137 ---- ++ || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type))); ++ ++ case ARRAY_TYPE: +++ case SET_TYPE: ++ /* We're already checked the component type (TREE_TYPE), so just check ++ the index type. */ ++ return type_contains_placeholder_p (TYPE_DOMAIN (type)); ++*************** ++*** 3142,3148 **** ++ if (EXPR_LOCUS (node) ++ && EXPR_LINENO (node) == line ++ && (EXPR_FILENAME (node) == file ++! || !strcmp (EXPR_FILENAME (node), file))) ++ { ++ last_annotated_node = EXPR_LOCUS (node); ++ return; ++--- 3143,3150 ---- ++ if (EXPR_LOCUS (node) ++ && EXPR_LINENO (node) == line ++ && (EXPR_FILENAME (node) == file ++! || (EXPR_FILENAME (node) && file ++! && ! strcmp (EXPR_FILENAME (node), file)))) ++ { ++ last_annotated_node = EXPR_LOCUS (node); ++ return; ++*************** ++*** 3154,3160 **** ++ if (last_annotated_node ++ && last_annotated_node->line == line ++ && (last_annotated_node->file == file ++! || !strcmp (last_annotated_node->file, file))) ++ { ++ SET_EXPR_LOCUS (node, last_annotated_node); ++ return; ++--- 3156,3163 ---- ++ if (last_annotated_node ++ && last_annotated_node->line == line ++ && (last_annotated_node->file == file ++! || (last_annotated_node->file && file ++! && ! strcmp (last_annotated_node->file, file)))) ++ { ++ SET_EXPR_LOCUS (node, last_annotated_node); ++ return; ++*************** ++*** 5007,5012 **** ++--- 5010,5016 ---- ++ TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type); ++ TYPE_ALIGN (itype) = TYPE_ALIGN (type); ++ TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type); +++ TYPE_UNSIGNED (itype) = TYPE_UNSIGNED (type); ++ ++ if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0)) ++ return type_hash_canon (tree_low_cst (highval, 0) ++*** gcc/tree.def Fri Feb 10 18:32:10 2006 ++--- gcc/tree.def Fri Aug 31 17:28:40 2007 ++*************** ++*** 254,259 **** ++--- 254,265 ---- ++ includes the hidden argument for "self". */ ++ DEFTREECODE (METHOD_TYPE, "method_type", tcc_type, 0) ++ +++ /* Types of sets for Pascal. Special fields are the same as +++ in an array type. The target type is always a boolean type. +++ Used for both bitstrings and powersets in Chill; +++ TYPE_STRING_FLAG indicates a bitstring. */ +++ DEFTREECODE (SET_TYPE, "set_type", tcc_type, 0) +++ ++ /* This is a language-specific kind of type. ++ Its meaning is defined by the language front end. ++ layout_type does not know how to lay this out, ++*** gcc/tree.h Fri Feb 9 03:52:53 2007 ++--- gcc/tree.h Fri Aug 31 17:28:40 2007 ++*************** ++*** 704,709 **** ++--- 704,712 ---- ++ #define NOT_RECORD_OR_UNION_CHECK(T) \ ++ TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE) ++ +++ #define ARRAY_OR_SET_CHECK(T) \ +++ TREE_CHECK2 (T, ARRAY_TYPE, SET_TYPE) +++ ++ #define NUMERICAL_TYPE_CHECK(T) \ ++ TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, \ ++ CHAR_TYPE, REAL_TYPE) ++*************** ++*** 817,823 **** ++ ++ #define AGGREGATE_TYPE_P(TYPE) \ ++ (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \ ++! || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE) ++ ++ /* Nonzero if TYPE represents a pointer or reference type. ++ (It should be renamed to INDIRECT_TYPE_P.) Keep these checks in ++--- 820,827 ---- ++ ++ #define AGGREGATE_TYPE_P(TYPE) \ ++ (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \ ++! || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE \ ++! || TREE_CODE (TYPE) == SET_TYPE) ++ ++ /* Nonzero if TYPE represents a pointer or reference type. ++ (It should be renamed to INDIRECT_TYPE_P.) Keep these checks in ++*************** ++*** 1618,1624 **** ++ #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit) ++ #define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode) ++ #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values) ++! #define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type.values) ++ #define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values) ++ #define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type.values) ++ #define TYPE_ORIG_SIZE_TYPE(NODE) \ ++--- 1622,1628 ---- ++ #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit) ++ #define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode) ++ #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values) ++! #define TYPE_DOMAIN(NODE) (ARRAY_OR_SET_CHECK (NODE)->type.values) ++ #define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values) ++ #define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type.values) ++ #define TYPE_ORIG_SIZE_TYPE(NODE) \ ++*************** ++*** 3555,3560 **** ++--- 3559,3573 ---- ++ /* and its original value in bytes, specified via -fpack-struct=. */ ++ extern unsigned int initial_max_fld_align; ++ +++ /* If nonzero, the alignment of a bitstring or (power-)set value, in bits. */ +++ extern unsigned int set_alignment; +++ +++ /* The word size of a bitstring or (power-)set value, in bits. */ +++ extern unsigned int set_word_size; +++ +++ /* If non-zero, bits in (power-)sets start with the highest bit. */ +++ extern unsigned int set_words_big_endian; +++ ++ /* Concatenate two lists (chains of TREE_LIST nodes) X and Y ++ by making the last node in X point to Y. ++ Returns X, except if X is 0 returns Y. */ ++*** gcc/varasm.c Mon Oct 16 11:58:48 2006 ++--- gcc/varasm.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 2708,2714 **** ++ VEC(constructor_elt, gc) *v; ++ unsigned HOST_WIDE_INT idx; ++ tree purpose, value; ++! ++ v = VEC_alloc(constructor_elt, gc, VEC_length(constructor_elt, ++ CONSTRUCTOR_ELTS (exp))); ++ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (exp), idx, purpose, value) ++--- 2708,2714 ---- ++ VEC(constructor_elt, gc) *v; ++ unsigned HOST_WIDE_INT idx; ++ tree purpose, value; ++! ++ v = VEC_alloc(constructor_elt, gc, VEC_length(constructor_elt, ++ CONSTRUCTOR_ELTS (exp))); ++ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (exp), idx, purpose, value) ++*************** ++*** 3748,3754 **** ++ /* Allow conversions to struct or union types if the value ++ inside is okay. */ ++ if (TREE_CODE (dest_type) == RECORD_TYPE ++! || TREE_CODE (dest_type) == UNION_TYPE) ++ return initializer_constant_valid_p (src, endtype); ++ } ++ break; ++--- 3748,3759 ---- ++ /* Allow conversions to struct or union types if the value ++ inside is okay. */ ++ if (TREE_CODE (dest_type) == RECORD_TYPE ++! || TREE_CODE (dest_type) == UNION_TYPE ++! #ifdef GPC ++! || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE ++! #endif ++! ) ++! ++ return initializer_constant_valid_p (src, endtype); ++ } ++ break; ++*** gcc/version.c Wed Mar 16 07:04:10 2005 ++--- gcc/version.c Fri Aug 31 17:28:40 2007 ++*************** ++*** 17,23 **** ++ forward us bugs reported to you, if you determine that they are ++ not bugs in your modifications.) */ ++ ++! const char bug_report_url[] = ""; ++ ++ /* The complete version string, assembled from several pieces. ++ BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */ ++--- 17,23 ---- ++ forward us bugs reported to you, if you determine that they are ++ not bugs in your modifications.) */ ++ ++! const char bug_report_url[] = ""; ++ ++ /* The complete version string, assembled from several pieces. ++ BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */ +diff -urN gpc-20060325/p/doc/en/copying-demo.texi gpc-20070904/p/doc/en/copying-demo.texi +--- gpc-20060325/p/doc/en/copying-demo.texi 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/doc/en/copying-demo.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -34,7 +34,7 @@ + + This demo program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +-published by the Free Software Foundation; either version 2, or (at ++published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This demo program is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/doc/en/copying.texi gpc-20070904/p/doc/en/copying.texi +--- gpc-20060325/p/doc/en/copying.texi 2004-09-20 04:43:25.000000000 +0200 ++++ gpc-20070904/p/doc/en/copying.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -22,392 +22,720 @@ + @cindex Copying + @cindex Redistribution + +-@center Version 2, June 1991 ++@c The GNU General Public License. ++@center Version 3, 29 June 2007 ++ ++@c This file is intended to be included within another document, ++@c hence no sectioning command or @node. + + @display +-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. +-59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA ++Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} + +-Everyone is permitted to copy and distribute verbatim copies +-of this license document, but changing it is not allowed. ++Everyone is permitted to copy and distribute verbatim copies of this ++license document, but changing it is not allowed. + @end display + +-@unnumberedsec GPL Preamble ++@heading Preamble ++ ++The GNU General Public License is a free, copyleft license for ++software and other kinds of works. + +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-License is intended to guarantee your freedom to share and change free +-software -- to make sure the software is free for all its users. This +-General Public License applies to most of the Free Software +-Foundation's software and to any other program whose authors commit to +-using it. (Some other Free Software Foundation software is covered by +-the GNU Lesser General Public License instead.) You can apply it to +-your programs, too. ++The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom ++to share and change all versions of a program---to make sure it remains ++free software for all its users. We, the Free Software Foundation, ++use the GNU General Public License for most of our software; it ++applies also to any other work released this way by its authors. You ++can apply it to your programs, too. + +- When we speak of free software, we are referring to freedom, not ++When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it +-in new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. +- +- For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, and +-(2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you ++have certain responsibilities if you distribute copies of the ++software, or if you modify it: responsibilities to respect the freedom ++of others. ++ ++For example, if you distribute copies of such a program, whether ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, ++receive or can get the source code. And you must show them these ++terms so they know their rights. ++ ++Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the ++manufacturer can do so. This is fundamentally incompatible with the ++aim of protecting users' freedom to change the software. The ++systematic pattern of such abuse occurs in the area of products for ++individuals to use, which is precisely where it is most unacceptable. ++Therefore, we have designed this version of the GPL to prohibit the ++practice for those products. If such problems arise substantially in ++other domains, we stand ready to extend this provision to those ++domains in future versions of the GPL, as needed to protect the ++freedom of users. ++ ++Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish ++to avoid the special danger that patents applied to a free program ++could make it effectively proprietary. To prevent this, the GPL ++assures that patents cannot be used to render the program non-free. + +- The precise terms and conditions for copying, distribution and ++The precise terms and conditions for copying, distribution and + modification follow. + +-@iftex +-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +-@end iftex +-@ifinfo +-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +-@end ifinfo ++@heading TERMS AND CONDITIONS + + @enumerate 0 +-@item +-This License applies to any program or other work which contains +-a notice placed by the copyright holder saying it may be distributed +-under the terms of this General Public License. The ``Program'', below, +-refers to any such program or work, and a ``work based on the Program'' +-means either the Program or any derivative work under copyright law: +-that is to say, a work containing the Program or a portion of it, +-either verbatim or with modifications and/or translated into another +-language. (Hereinafter, translation is included without limitation in +-the term ``modification''.) Each licensee is addressed as ``you''. +- +-Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running the Program is not restricted, and the output from the Program +-is covered only if its contents constitute a work based on the +-Program (independent of having been made by running the Program). +-Whether that is true depends on what the Program does. +- +-@item +-You may copy and distribute verbatim copies of the Program's +-source code as you receive it, in any medium, provided that you +-conspicuously and appropriately publish on each copy an appropriate +-copyright notice and disclaimer of warranty; keep intact all the +-notices that refer to this License and to the absence of any warranty; +-and give any other recipients of the Program a copy of this License +-along with the Program. +- +-You may charge a fee for the physical act of transferring a copy, and +-you may at your option offer warranty protection in exchange for a fee. +- +-@item +-You may modify your copy or copies of the Program or any portion +-of it, thus forming a work based on the Program, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: ++@item Definitions. ++ ++``This License'' refers to version 3 of the GNU General Public License. ++ ++``Copyright'' also means copyright-like laws that apply to other kinds ++of works, such as semiconductor masks. ++ ++``The Program'' refers to any copyrightable work licensed under this ++License. Each licensee is addressed as ``you''. ``Licensees'' and ++``recipients'' may be individuals or organizations. ++ ++To ``modify'' a work means to copy from or adapt all or part of the work ++in a fashion requiring copyright permission, other than the making of ++an exact copy. The resulting work is called a ``modified version'' of ++the earlier work or a work ``based on'' the earlier work. ++ ++A ``covered work'' means either the unmodified Program or a work based ++on the Program. ++ ++To ``propagate'' a work means to do anything with it that, without ++permission, would make you directly or secondarily liable for ++infringement under applicable copyright law, except executing it on a ++computer or modifying a private copy. Propagation includes copying, ++distribution (with or without modification), making available to the ++public, and in some countries other activities as well. ++ ++To ``convey'' a work means any kind of propagation that enables other ++parties to make or receive copies. Mere interaction with a user ++through a computer network, with no transfer of a copy, is not ++conveying. ++ ++An interactive user interface displays ``Appropriate Legal Notices'' to ++the extent that it includes a convenient and prominently visible ++feature that (1) displays an appropriate copyright notice, and (2) ++tells the user that there is no warranty for the work (except to the ++extent that warranties are provided), that licensees may convey the ++work under this License, and how to view a copy of this License. If ++the interface presents a list of user commands or options, such as a ++menu, a prominent item in the list meets this criterion. ++ ++@item Source Code. ++ ++The ``source code'' for a work means the preferred form of the work for ++making modifications to it. ``Object code'' means any non-source form ++of a work. ++ ++A ``Standard Interface'' means an interface that either is an official ++standard defined by a recognized standards body, or, in the case of ++interfaces specified for a particular programming language, one that ++is widely used among developers working in that language. ++ ++The ``System Libraries'' of an executable work include anything, other ++than the work as a whole, that (a) is included in the normal form of ++packaging a Major Component, but which is not part of that Major ++Component, and (b) serves only to enable use of the work with that ++Major Component, or to implement a Standard Interface for which an ++implementation is available to the public in source code form. A ++``Major Component'', in this context, means a major essential component ++(kernel, window system, and so on) of the specific operating system ++(if any) on which the executable work runs, or a compiler used to ++produce the work, or an object code interpreter used to run it. ++ ++The ``Corresponding Source'' for a work in object code form means all ++the source code needed to generate, install, and (for an executable ++work) run the object code and to modify the work, including scripts to ++control those activities. However, it does not include the work's ++System Libraries, or general-purpose tools or generally available free ++programs which are used unmodified in performing those activities but ++which are not part of the work. For example, Corresponding Source ++includes interface definition files associated with source files for ++the work, and the source code for shared libraries and dynamically ++linked subprograms that the work is specifically designed to require, ++such as by intimate data communication or control flow between those ++subprograms and other parts of the work. ++ ++The Corresponding Source need not include anything that users can ++regenerate automatically from other parts of the Corresponding Source. ++ ++The Corresponding Source for a work in source code form is that same ++work. ++ ++@item Basic Permissions. ++ ++All rights granted under this License are granted for the term of ++copyright on the Program, and are irrevocable provided the stated ++conditions are met. This License explicitly affirms your unlimited ++permission to run the unmodified Program. The output from running a ++covered work is covered by this License only if the output, given its ++content, constitutes a covered work. This License acknowledges your ++rights of fair use or other equivalent, as provided by copyright law. ++ ++You may make, run and propagate covered works that you do not convey, ++without conditions so long as your license otherwise remains in force. ++You may convey covered works to others for the sole purpose of having ++them make modifications exclusively for you, or provide you with ++facilities for running those works, provided that you comply with the ++terms of this License in conveying all material for which you do not ++control copyright. Those thus making or running the covered works for ++you must do so exclusively on your behalf, under your direction and ++control, on terms that prohibit them from making any copies of your ++copyrighted material outside their relationship with you. ++ ++Conveying under any other circumstances is permitted solely under the ++conditions stated below. Sublicensing is not allowed; section 10 ++makes it unnecessary. ++ ++@item Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++No covered work shall be deemed part of an effective technological ++measure under any applicable law fulfilling obligations under article ++11 of the WIPO copyright treaty adopted on 20 December 1996, or ++similar laws prohibiting or restricting circumvention of such ++measures. ++ ++When you convey a covered work, you waive any legal power to forbid ++circumvention of technological measures to the extent such ++circumvention is effected by exercising rights under this License with ++respect to the covered work, and you disclaim any intention to limit ++operation or modification of the work as a means of enforcing, against ++the work's users, your or third parties' legal rights to forbid ++circumvention of technological measures. ++ ++@item Conveying Verbatim Copies. ++ ++You may convey verbatim copies of the Program's source code as you ++receive it, in any medium, provided that you conspicuously and ++appropriately publish on each copy an appropriate copyright notice; ++keep intact all notices stating that this License and any ++non-permissive terms added in accord with section 7 apply to the code; ++keep intact all notices of the absence of any warranty; and give all ++recipients a copy of this License along with the Program. ++ ++You may charge any price or no price for each copy that you convey, ++and you may offer support or warranty protection for a fee. ++ ++@item Conveying Modified Source Versions. ++ ++You may convey a work based on the Program, or the modifications to ++produce it from the Program, in the form of source code under the ++terms of section 4, provided that you also meet all of these ++conditions: + + @enumerate a +-@item +-You must cause the modified files to carry prominent notices +-stating that you changed the files and the date of any change. ++@item ++The work must carry prominent notices stating that you modified it, ++and giving a relevant date. ++ ++@item ++The work must carry prominent notices stating that it is released ++under this License and any conditions added under section 7. This ++requirement modifies the requirement in section 4 to ``keep intact all ++notices''. ++ ++@item ++You must license the entire work, as a whole, under this License to ++anyone who comes into possession of a copy. This License will ++therefore apply, along with any applicable section 7 additional terms, ++to the whole of the work, and all its parts, regardless of how they ++are packaged. This License gives no permission to license the work in ++any other way, but it does not invalidate such permission if you have ++separately received it. ++ ++@item ++If the work has interactive user interfaces, each must display ++Appropriate Legal Notices; however, if the Program has interactive ++interfaces that do not display Appropriate Legal Notices, your work ++need not make them do so. ++@end enumerate ++ ++A compilation of a covered work with other separate and independent ++works, which are not by their nature extensions of the covered work, ++and which are not combined with it such as to form a larger program, ++in or on a volume of a storage or distribution medium, is called an ++``aggregate'' if the compilation and its resulting copyright are not ++used to limit the access or legal rights of the compilation's users ++beyond what the individual works permit. Inclusion of a covered work ++in an aggregate does not cause this License to apply to the other ++parts of the aggregate. ++ ++@item Conveying Non-Source Forms. ++ ++You may convey a covered work in object code form under the terms of ++sections 4 and 5, provided that you also convey the machine-readable ++Corresponding Source under the terms of this License, in one of these ++ways: + ++@enumerate a + @item +-You must cause any work that you distribute or publish, that in +-whole or in part contains or is derived from the Program or any +-part thereof, to be licensed as a whole at no charge to all third +-parties under the terms of this License. +- +-@item +-If the modified program normally reads commands interactively +-when run, you must cause it, when started running for such +-interactive use in the most ordinary way, to print or display an +-announcement including an appropriate copyright notice and a +-notice that there is no warranty (or else, saying that you provide +-a warranty) and that users may redistribute the program under +-these conditions, and telling the user how to view a copy of this +-License. (Exception: if the Program itself is interactive but +-does not normally print such an announcement, your work based on +-the Program is not required to print an announcement.) ++Convey the object code in, or embodied in, a physical product ++(including a physical distribution medium), accompanied by the ++Corresponding Source fixed on a durable physical medium customarily ++used for software interchange. ++ ++@item ++Convey the object code in, or embodied in, a physical product ++(including a physical distribution medium), accompanied by a written ++offer, valid for at least three years and valid for as long as you ++offer spare parts or customer support for that product model, to give ++anyone who possesses the object code either (1) a copy of the ++Corresponding Source for all the software in the product that is ++covered by this License, on a durable physical medium customarily used ++for software interchange, for a price no more than your reasonable ++cost of physically performing this conveying of source, or (2) access ++to copy the Corresponding Source from a network server at no charge. ++ ++@item ++Convey individual copies of the object code with a copy of the written ++offer to provide the Corresponding Source. This alternative is ++allowed only occasionally and noncommercially, and only if you ++received the object code with such an offer, in accord with subsection ++6b. ++ ++@item ++Convey the object code by offering access from a designated place ++(gratis or for a charge), and offer equivalent access to the ++Corresponding Source in the same way through the same place at no ++further charge. You need not require recipients to copy the ++Corresponding Source along with the object code. If the place to copy ++the object code is a network server, the Corresponding Source may be ++on a different server (operated by you or a third party) that supports ++equivalent copying facilities, provided you maintain clear directions ++next to the object code saying where to find the Corresponding Source. ++Regardless of what server hosts the Corresponding Source, you remain ++obligated to ensure that it is available for as long as needed to ++satisfy these requirements. ++ ++@item ++Convey the object code using peer-to-peer transmission, provided you ++inform other peers where the object code and Corresponding Source of ++the work are being offered to the general public at no charge under ++subsection 6d. ++ + @end enumerate + +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Program, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Program, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Program. +- +-In addition, mere aggregation of another work not based on the Program +-with the Program (or with a work based on the Program) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +-@item +-You may copy and distribute the Program (or a work based on it, +-under Section 2) in object code or executable form under the terms of +-Sections 1 and 2 above provided that you also do one of the following: ++A separable portion of the object code, whose source code is excluded ++from the Corresponding Source as a System Library, need not be ++included in conveying the object code work. ++ ++A ``User Product'' is either (1) a ``consumer product'', which means any ++tangible personal property which is normally used for personal, ++family, or household purposes, or (2) anything designed or sold for ++incorporation into a dwelling. In determining whether a product is a ++consumer product, doubtful cases shall be resolved in favor of ++coverage. For a particular product received by a particular user, ++``normally used'' refers to a typical or common use of that class of ++product, regardless of the status of the particular user or of the way ++in which the particular user actually uses, or expects or is expected ++to use, the product. A product is a consumer product regardless of ++whether the product has substantial commercial, industrial or ++non-consumer uses, unless such uses represent the only significant ++mode of use of the product. ++ ++``Installation Information'' for a User Product means any methods, ++procedures, authorization keys, or other information required to ++install and execute modified versions of a covered work in that User ++Product from a modified version of its Corresponding Source. The ++information must suffice to ensure that the continued functioning of ++the modified object code is in no case prevented or interfered with ++solely because modification has been made. ++ ++If you convey an object code work under this section in, or with, or ++specifically for use in, a User Product, and the conveying occurs as ++part of a transaction in which the right of possession and use of the ++User Product is transferred to the recipient in perpetuity or for a ++fixed term (regardless of how the transaction is characterized), the ++Corresponding Source conveyed under this section must be accompanied ++by the Installation Information. But this requirement does not apply ++if neither you nor any third party retains the ability to install ++modified object code on the User Product (for example, the work has ++been installed in ROM). ++ ++The requirement to provide Installation Information does not include a ++requirement to continue to provide support service, warranty, or ++updates for a work that has been modified or installed by the ++recipient, or for the User Product in which it has been modified or ++installed. Access to a network may be denied when the modification ++itself materially and adversely affects the operation of the network ++or violates the rules and protocols for communication across the ++network. ++ ++Corresponding Source conveyed, and Installation Information provided, ++in accord with this section must be in a format that is publicly ++documented (and with an implementation available to the public in ++source code form), and must require no special password or key for ++unpacking, reading or copying. ++ ++@item Additional Terms. ++ ++``Additional permissions'' are terms that supplement the terms of this ++License by making exceptions from one or more of its conditions. ++Additional permissions that are applicable to the entire Program shall ++be treated as though they were included in this License, to the extent ++that they are valid under applicable law. If additional permissions ++apply only to part of the Program, that part may be used separately ++under those permissions, but the entire Program remains governed by ++this License without regard to the additional permissions. ++ ++When you convey a copy of a covered work, you may at your option ++remove any additional permissions from that copy, or from any part of ++it. (Additional permissions may be written to require their own ++removal in certain cases when you modify the work.) You may place ++additional permissions on material, added by you to a covered work, ++for which you have or can give appropriate copyright permission. ++ ++Notwithstanding any other provision of this License, for material you ++add to a covered work, you may (if authorized by the copyright holders ++of that material) supplement the terms of this License with terms: + + @enumerate a + @item +-Accompany it with the complete corresponding machine-readable +-source code, which must be distributed under the terms of Sections +-1 and 2 above on a medium customarily used for software interchange; or, +- +-@item +-Accompany it with a written offer, valid for at least three +-years, to give any third party, for a charge no more than your +-cost of physically performing source distribution, a complete +-machine-readable copy of the corresponding source code, to be +-distributed under the terms of Sections 1 and 2 above on a medium +-customarily used for software interchange; or, +- +-@item +-Accompany it with the information you received as to the offer +-to distribute corresponding source code. (This alternative is +-allowed only for noncommercial distribution and only if you +-received the program in object code or executable form with such +-an offer, in accord with Subsection b above.) ++Disclaiming warranty or limiting liability differently from the terms ++of sections 15 and 16 of this License; or ++ ++@item ++Requiring preservation of specified reasonable legal notices or author ++attributions in that material or in the Appropriate Legal Notices ++displayed by works containing it; or ++ ++@item ++Prohibiting misrepresentation of the origin of that material, or ++requiring that modified versions of such material be marked in ++reasonable ways as different from the original version; or ++ ++@item ++Limiting the use for publicity purposes of names of licensors or ++authors of the material; or ++ ++@item ++Declining to grant rights under trademark law for use of some trade ++names, trademarks, or service marks; or ++ ++@item ++Requiring indemnification of licensors and authors of that material by ++anyone who conveys the material (or modified versions of it) with ++contractual assumptions of liability to the recipient, for any ++liability that these contractual assumptions directly impose on those ++licensors and authors. + @end enumerate + +-The source code for a work means the preferred form of the work for +-making modifications to it. For an executable work, complete source +-code means all the source code for all modules it contains, plus any +-associated interface definition files, plus the scripts used to +-control compilation and installation of the executable. However, as a +-special exception, the source code distributed need not include +-anything that is normally distributed (in either source or binary +-form) with the major components (compiler, kernel, and so on) of the +-operating system on which the executable runs, unless that component +-itself accompanies the executable. +- +-If distribution of executable or object code is made by offering +-access to copy from a designated place, then offering equivalent +-access to copy the source code from the same place counts as +-distribution of the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +-@item +-You may not copy, modify, sublicense, or distribute the Program +-except as expressly provided under this License. Any attempt +-otherwise to copy, modify, sublicense or distribute the Program is +-void, and will automatically terminate your rights under this License. +-However, parties who have received copies, or rights, from you under +-this License will not have their licenses terminated so long as such +-parties remain in full compliance. +- +-@item +-You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Program or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Program (or any work based on the +-Program), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Program or works based on it. +- +-@item +-Each time you redistribute the Program (or any work based on the +-Program), the recipient automatically receives a license from the +-original licensor to copy, distribute or modify the Program subject to +-these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties to ++All other non-permissive additional terms are considered ``further ++restrictions'' within the meaning of section 10. If the Program as you ++received it, or any part of it, contains a notice stating that it is ++governed by this License along with a term that is a further ++restriction, you may remove that term. If a license document contains ++a further restriction but permits relicensing or conveying under this ++License, you may add to a covered work material governed by the terms ++of that license document, provided that the further restriction does ++not survive such relicensing or conveying. ++ ++If you add terms to a covered work in accord with this section, you ++must place, in the relevant source files, a statement of the ++additional terms that apply to those files, or a notice indicating ++where to find the applicable terms. ++ ++Additional terms, permissive or non-permissive, may be stated in the ++form of a separately written license, or stated as exceptions; the ++above requirements apply either way. ++ ++@item Termination. ++ ++You may not propagate or modify a covered work except as expressly ++provided under this License. Any attempt otherwise to propagate or ++modify it is void, and will automatically terminate your rights under ++this License (including any patent licenses granted under the third ++paragraph of section 11). ++ ++However, if you cease all violation of this License, then your license ++from a particular copyright holder is reinstated (a) provisionally, ++unless and until the copyright holder explicitly and finally ++terminates your license, and (b) permanently, if the copyright holder ++fails to notify you of the violation by some reasonable means prior to ++60 days after the cessation. ++ ++Moreover, your license from a particular copyright holder is ++reinstated permanently if the copyright holder notifies you of the ++violation by some reasonable means, this is the first time you have ++received notice of violation of this License (for any work) from that ++copyright holder, and you cure the violation prior to 30 days after ++your receipt of the notice. ++ ++Termination of your rights under this section does not terminate the ++licenses of parties who have received copies or rights from you under ++this License. If your rights have been terminated and not permanently ++reinstated, you do not qualify to receive new licenses for the same ++material under section 10. ++ ++@item Acceptance Not Required for Having Copies. ++ ++You are not required to accept this License in order to receive or run ++a copy of the Program. Ancillary propagation of a covered work ++occurring solely as a consequence of using peer-to-peer transmission ++to receive a copy likewise does not require acceptance. However, ++nothing other than this License grants you permission to propagate or ++modify any covered work. These actions infringe copyright if you do ++not accept this License. Therefore, by modifying or propagating a ++covered work, you indicate your acceptance of this License to do so. ++ ++@item Automatic Licensing of Downstream Recipients. ++ ++Each time you convey a covered work, the recipient automatically ++receives a license from the original licensors, to run, modify and ++propagate that work, subject to this License. You are not responsible ++for enforcing compliance by third parties with this License. ++ ++An ``entity transaction'' is a transaction transferring control of an ++organization, or substantially all assets of one, or subdividing an ++organization, or merging organizations. If propagation of a covered ++work results from an entity transaction, each party to that ++transaction who receives a copy of the work also receives whatever ++licenses to the work the party's predecessor in interest had or could ++give under the previous paragraph, plus a right to possession of the ++Corresponding Source of the work from the predecessor in interest, if ++the predecessor has it or can get it with reasonable efforts. ++ ++You may not impose any further restrictions on the exercise of the ++rights granted or affirmed under this License. For example, you may ++not impose a license fee, royalty, or other charge for exercise of ++rights granted under this License, and you may not initiate litigation ++(including a cross-claim or counterclaim in a lawsuit) alleging that ++any patent claim is infringed by making, using, selling, offering for ++sale, or importing the Program or any portion of it. ++ ++@item Patents. ++ ++A ``contributor'' is a copyright holder who authorizes use under this ++License of the Program or a work on which the Program is based. The ++work thus licensed is called the contributor's ``contributor version''. ++ ++A contributor's ``essential patent claims'' are all patent claims owned ++or controlled by the contributor, whether already acquired or ++hereafter acquired, that would be infringed by some manner, permitted ++by this License, of making, using, or selling its contributor version, ++but do not include claims that would be infringed only as a ++consequence of further modification of the contributor version. For ++purposes of this definition, ``control'' includes the right to grant ++patent sublicenses in a manner consistent with the requirements of + this License. + +-@item +-If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or ++Each contributor grants you a non-exclusive, worldwide, royalty-free ++patent license under the contributor's essential patent claims, to ++make, use, sell, offer for sale, import and otherwise run, modify and ++propagate the contents of its contributor version. ++ ++In the following three paragraphs, a ``patent license'' is any express ++agreement or commitment, however denominated, not to enforce a patent ++(such as an express permission to practice a patent or covenant not to ++sue for patent infringement). To ``grant'' such a patent license to a ++party means to make such an agreement or commitment not to enforce a ++patent against the party. ++ ++If you convey a covered work, knowingly relying on a patent license, ++and the Corresponding Source of the work is not available for anyone ++to copy, free of charge and under the terms of this License, through a ++publicly available network server or other readily accessible means, ++then you must either (1) cause the Corresponding Source to be so ++available, or (2) arrange to deprive yourself of the benefit of the ++patent license for this particular work, or (3) arrange, in a manner ++consistent with the requirements of this License, to extend the patent ++license to downstream recipients. ``Knowingly relying'' means you have ++actual knowledge that, but for the patent license, your conveying the ++covered work in a country, or your recipient's use of the covered work ++in a country, would infringe one or more identifiable patents in that ++country that you have reason to believe are valid. ++ ++If, pursuant to or in connection with a single transaction or ++arrangement, you convey, or propagate by procuring conveyance of, a ++covered work, and grant a patent license to some of the parties ++receiving the covered work authorizing them to use, propagate, modify ++or convey a specific copy of the covered work, then the patent license ++you grant is automatically extended to all recipients of the covered ++work and works based on it. ++ ++A patent license is ``discriminatory'' if it does not include within the ++scope of its coverage, prohibits the exercise of, or is conditioned on ++the non-exercise of one or more of the rights that are specifically ++granted under this License. You may not convey a covered work if you ++are a party to an arrangement with a third party that is in the ++business of distributing software, under which you make payment to the ++third party based on the extent of your activity of conveying the ++work, and under which the third party grants, to any of the parties ++who would receive the covered work from you, a discriminatory patent ++license (a) in connection with copies of the covered work conveyed by ++you (or copies made from those copies), or (b) primarily for and in ++connection with specific products or compilations that contain the ++covered work, unless you entered into that arrangement, or that patent ++license was granted, prior to 28 March 2007. ++ ++Nothing in this License shall be construed as excluding or limiting ++any implied license or other defenses to infringement that may ++otherwise be available to you under applicable patent law. ++ ++@item No Surrender of Others' Freedom. ++ ++If conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Program at all. For example, if a patent +-license would not permit royalty-free redistribution of the Program by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Program. +- +-If any portion of this section is held invalid or unenforceable under +-any particular circumstance, the balance of the section is intended to +-apply and the section as a whole is intended to apply in other +-circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system, which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +-@item +-If the distribution and/or use of the Program is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Program under this License +-may add an explicit geographical distribution limitation excluding +-those countries, so that distribution is permitted only in or among +-countries not thus excluded. In such case, this License incorporates +-the limitation as if written in the body of this License. ++excuse you from the conditions of this License. If you cannot convey ++a covered work so as to satisfy simultaneously your obligations under ++this License and any other pertinent obligations, then as a ++consequence you may not convey it at all. For example, if you agree ++to terms that obligate you to collect a royalty for further conveying ++from those to whom you convey the Program, the only way you could ++satisfy both those terms and this License would be to refrain entirely ++from conveying the Program. ++ ++@item Use with the GNU Affero General Public License. ++ ++Notwithstanding any other provision of this License, you have ++permission to link or combine any covered work with a work licensed ++under version 3 of the GNU Affero General Public License into a single ++combined work, and to convey the resulting work. The terms of this ++License will continue to apply to the part which is the covered work, ++but the special requirements of the GNU Affero General Public License, ++section 13, concerning interaction through a network will apply to the ++combination as such. ++ ++@item Revised Versions of this License. + +-@item + The Free Software Foundation may publish revised and/or new versions +-of the General Public License from time to time. Such new versions will +-be similar in spirit to the present version, but may differ in detail to +-address new problems or concerns. ++of the GNU General Public License from time to time. Such new ++versions will be similar in spirit to the present version, but may ++differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program +-specifies a version number of this License which applies to it and ``any +-later version'', you have the option of following the terms and conditions +-either of that version or of any later version published by the Free +-Software Foundation. If the Program does not specify a version number of +-this License, you may choose any version ever published by the Free Software +-Foundation. +- +-@item +-If you wish to incorporate parts of the Program into other free +-programs whose distribution conditions are different, write to the author +-to ask for permission. For software which is copyrighted by the Free +-Software Foundation, write to the Free Software Foundation; we sometimes +-make exceptions for this. Our decision will be guided by the two goals +-of preserving the free status of all derivatives of our free software and +-of promoting the sharing and reuse of software generally. +- +-@iftex +-@heading NO WARRANTY +-@end iftex +-@ifinfo +-@center NO WARRANTY +-@end ifinfo +- +-@item +-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +-REPAIR OR CORRECTION. ++specifies that a certain numbered version of the GNU General Public ++License ``or any later version'' applies to it, you have the option of ++following the terms and conditions either of that numbered version or ++of any later version published by the Free Software Foundation. If ++the Program does not specify a version number of the GNU General ++Public License, you may choose any version ever published by the Free ++Software Foundation. ++ ++If the Program specifies that a proxy can decide which future versions ++of the GNU General Public License can be used, that proxy's public ++statement of acceptance of a version permanently authorizes you to ++choose that version for the Program. ++ ++Later license versions may give you additional or different ++permissions. However, no additional obligations are imposed on any ++author or copyright holder as a result of your choosing to follow a ++later version. ++ ++@item Disclaimer of Warranty. ++ ++THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ++HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT ++WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT ++LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND ++PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE ++DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR ++CORRECTION. ++ ++@item Limitation of Liability. + +-@item + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +-POSSIBILITY OF SUCH DAMAGES. ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR ++CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, ++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ++ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT ++NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR ++LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM ++TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER ++PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ ++@item Interpretation of Sections 15 and 16. ++ ++If the disclaimer of warranty and limitation of liability provided ++above cannot be given local legal effect according to their terms, ++reviewing courts shall apply local law that most closely approximates ++an absolute waiver of all civil liability in connection with the ++Program, unless a warranty or assumption of liability accompanies a ++copy of the Program in return for a fee. ++ + @end enumerate + +-@iftex + @heading END OF TERMS AND CONDITIONS +-@end iftex +-@ifinfo +-@center END OF TERMS AND CONDITIONS +-@end ifinfo + +-@c @page +-@unnumberedsec How to Apply These Terms to Your New Programs ++@heading How to Apply These Terms to Your New Programs + +- If you develop a new program, and you want it to be of the greatest ++If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it +-free software which everyone can redistribute and change under these terms. ++free software which everyone can redistribute and change under these ++terms. + +- To do so, attach the following notices to the program. It is safest ++To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least ++state the exclusion of warranty; and each file should have at least + the ``copyright'' line and a pointer to where the full notice is found. + + @smallexample +-@var{one line to give the program's name and a brief idea of what it does.} +-Copyright (C) @var{year} @var{name of author} ++@var{one line to give the program's name and a brief idea of what it does.} ++Copyright (C) @var{year} @var{name of author} + +-This program is free software; you can redistribute it and/or modify ++This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +-the Free Software Foundation; either version 2 of the License, or +-(at your option) any later version. ++the Free Software Foundation, either version 3 of the License, or (at ++your option) any later version. + +-This program is distributed in the hope that it will be useful, +-but WITHOUT ANY WARRANTY; without even the implied warranty of +-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-GNU General Public License for more details. ++This program is distributed in the hope that it will be useful, but ++WITHOUT 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 +-along with this program; if not, write to the Free Software +-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++along with this program. If not, see @url{http://www.gnu.org/licenses/}. + @end smallexample + + Also add information on how to contact you by electronic and paper mail. + +-If the program is interactive, make it output a short notice like this +-when it starts in an interactive mode: ++If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: + + @smallexample +-Gnomovision version 69, Copyright (C) @var{year} @var{name of author} +-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +-type `show w'. ++@var{program} Copyright (C) @var{year} @var{name of author} ++This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. + This is free software, and you are welcome to redistribute it +-under certain conditions; type `show c' for details. ++under certain conditions; type @samp{show c} for details. + @end smallexample + + The hypothetical commands @samp{show w} and @samp{show c} should show +-the appropriate parts of the General Public License. Of course, the +-commands you use may be called something other than @samp{show w} and +-@samp{show c}; they could even be mouse-clicks or menu items -- whatever +-suits your program. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a ``copyright disclaimer'' for the program, if +-necessary. Here is a sample; alter the names: +- +-@smallexample +-Yoyodyne, Inc., hereby disclaims all copyright interest in the program +-`Gnomovision' (which makes passes at compilers) written by James Hacker. +- +-@var{signature of Ty Coon}, 1 April 1989 +-Ty Coon, President of Vice +-@end smallexample +- +-This General Public License does not permit incorporating your program into +-proprietary programs. If your program is a subroutine library, you may +-consider it more useful to permit linking proprietary applications with the +-library. If this is what you want to do, use the GNU Lesser General +-Public License instead of this License. ++the appropriate parts of the General Public License. Of course, your ++program's commands might be different; for a GUI interface, you would ++use an ``about box''. ++ ++You should also get your employer (if you work as a programmer) or school, ++if any, to sign a ``copyright disclaimer'' for the program, if necessary. ++For more information on this, and how to apply and follow the GNU GPL, see ++@url{http://www.gnu.org/licenses/}. ++ ++The GNU General Public License does not permit incorporating your ++program into proprietary programs. If your program is a subroutine ++library, you may consider it more useful to permit linking proprietary ++applications with the library. If this is what you want to do, use ++the GNU Lesser General Public License instead of this License. But ++first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. +diff -urN gpc-20060325/p/doc/en/news.texi gpc-20070904/p/doc/en/news.texi +--- gpc-20060325/p/doc/en/news.texi 2006-03-25 03:07:30.000000000 +0100 ++++ gpc-20070904/p/doc/en/news.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -39,6 +39,13 @@ + @samp{(@@)}. + + @itemize @bullet ++@item support building libgpc as Mach shared library ++@item `GPC_Initialize' and `GPC_Finalize' available as user ++routines (to help building shared libraries) ++@item better warnings for unexpected results of string comparisons ++@item handle `volatile' attribute on types ++@item allow `asm' in any dialect (if the `asm' keyword is enabled) ++@item support for gcc-4.1.x + @item preliminary support for gcc-4.0.x + @item handle named exit from a method + @item check string parameters more strictly (@@) +diff -urN gpc-20060325/p/doc/en/news.texi~ gpc-20070904/p/doc/en/news.texi~ +--- gpc-20060325/p/doc/en/news.texi~ 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/doc/en/news.texi~ 1970-01-01 01:00:00.000000000 +0100 +@@ -1,199 +0,0 @@ +-@c Copyright (C) 2002-2006 Free Software Foundation, Inc. +-@c For copying conditions, see the file gpc.texi. +-@c This file is part of the GPC Manual. +-@c +-@c Author: Frank Heckenbach +-@c +-@c Last modification: 2006-02-02 (file up to date) +- +-@ifclear NEWSONLY +-@node News +-@chapter New Features of GNU Pascal. +-@cindex news +-@end ifclear +- +-@ifset NEWSONLY +-@include version.texi +-@c Note: The following line gets inserted into the destination file, +-@c it does not apply to this Texinfo file! +-This file was generated automatically from news.texi.@* +-@sc{DO NOT CHANGE THIS FILE MANUALLY!} +- +-@settitle GPC News +-@node Top +-@chapter GPC News +-@paragraphindent 0 +-@end ifset +- +-GPC's new or changed features since the last (non alpha/beta) GPC +-release are listed here. Items without further description refer to +-new routines, variables or options. +- +-Features implemented for compatibility to other compilers are marked +-with, e.g., @samp{(B)} for BP compatibility. +- +-A few old and obsolete features have been dropped or replaced by +-cleaner, more flexible or otherwise more useful ones. This might +-lead to minor problems with old code, but we suppose they're rare +-and easy to overcome. Backward-incompatible changes are marked with +-@samp{(@@)}. +- +-@itemize @bullet +-@item refuse @samp{--executable-file-name} on names without a suffix +-@item do not create @samp{.gpi} files from incorrect input +-@item @samp{CWordBool} type +-@item allow passing variant selector by reference in default mode +-@item @samp{noinline} attribute +-@item check for identifier redeclaration in records and parameter +-lists (@@) +-@item set constants are compatible with packed sets +-@item @samp{ReadString} and @samp{StringOf} predefined routines (M) +-@item pass discriminated string schema by value (@@) +-@item @samp{const var} parameters +-@item preliminary support for OOE class views (test/view1[a-g].pas) +-@item @samp{--iso-goto-restrictions} option +-@item @samp{--preprocessed} option +-@item integrated preprocessor (@@) +-@item @samp{--longjmp-all-nonlocal-labels} is on by default on Darwin/PPC +-@item preliminary support for Delphi classes and Mac objects (D) (M) +-(delphi1[bc].pas, peter5[a-g].pas) +-@item new options @samp{--[no]-objects-require-override}, +-@samp{--[no]-delphi-method-shadowing}, @samp{--[no]-objects-are-references} +-(off by default) (D) (M) +-@item new options @samp{--gnu-objects} (default), @samp{--ooe-objects}, @samp{--mac-objects}, @samp{--borland-objects} which choose object model +-@item @samp{uses} can not directly follow @samp{import} (@@) +-@item handle @samp{+} and @samp{-} as Mac Pascal does (M) (@@) +-@item new options @samp{--[no]-nonlocal-exit} (default in @samp{--ucsd-pascal} and @samp{--mac-pascal}) (fjf988[fijk].pas, fjf1062*.pas) (U) (M) +-@item new options @samp{--[no]-object-checking} (on by default) to check on virtual method calls if VMT pointer is not nil and has matchin @samp{Size} and @samp{NegatedSize} entries, new options @samp{--[no]-range-and-object-checking} which are now equivalent to @samp{$R[+-]} (fjf1053*.pas) (B) +-@item new options @samp{--[no]-pointer-checking}, @samp{--[no]-pointer-checking-user-defined}; new variable @samp{ValidatePointerPtr} (fjf1052*.pas, pcerrorc.pas) (these options are @emph{off} by default!) +-@item new options @samp{--[no]-implicit-result} (fjf1022*.pas) (on by default @strong{only} in @samp{--delphi} mode!) (D) (@@) +-@item new options @samp{--@{en,dis@}able-predefined-identifier} (fjf1037*.pas) +- +-@item @samp{import} within a routine (mod15[c-e].pas) +-@item the option @samp{--no-debug-info} was renamed to @samp{--disable-debug-info}, and @samp{--no-default-paths} was renamed to @samp{--disable-default-paths} (@@) +-@item qualified identifiers (chief18.pas, fjf260*.pas, fjf921*.pas, grp1.pas, kurzw1.pas, mod@{9,10,13..17@}*.pas) (@@) +-@item with @samp{-Wnested-comments} and without @samp{--nested-comments} warn about comment openers found within comments (fjf1017*.pas) +-@item new options @samp{--[no-]case-value-checking} (fjf1012*.pas) +-@item optimize arithmetic with a complex and a real operand <20020118143553.B28837@@artax.karlin.mff.cuni.cz> +-@item range checking (chuck5.pas, fjf446.pas, fjf989*.pas, fjf992*.pas, fsc@{01..37@}*.pas, miklos1[bc].pas, mir@{016,021..028,030..047@}*.pas, ole[12]*.pas, russ4*.pas) +- +-@item @samp{Exit} with an argument (non-local exits not yet supported) (fjf988*.pas) (U) (M) +-@item new options @samp{--[no-]propagate-units} (on by default with @samp{--mac-pascal}, off in other dialects) (fjf987*.pas) (M); this also covers the item ``unit inheritance'' +-@item enable @samp{Pointer} in @samp{--mac-pascal} mode (Mac Pascal has a @samp{Pointer} function which does the same as a type-cast to @samp{Pointer}; though adding @samp{Pointer} as a type allows more, it's backward-compatible) (M) +-@item @samp{&} and @samp{|} (shortcut @samp{and} and @samp{or}) (fjf981*.pas) (M) +-@item @samp{Leave} and @samp{Cycle} (equivalent to @samp{Break} and @samp{Continue}) (avo3.pas) (M) +-@item optimize @samp{WriteLn (... @var{string_constant})} and @samp{Write (... @var{string_constant}, @var{string_constant} ...)} +-@item @samp{BindingType} is now a packed record as EP demands (fjf975a.pas) (E) +-@item EP structured initializers (fjf964*.pas, fjf967*.pas, fjf968*.pas) (E) +-@item EP record, array, set values (constdef.pas, fjf966*.pas, fjf971*.pas) (E) +-@item @file{gp}: @samp{PC} now sets the compiler for both Pascal and C unless @samp{CC} is set explicitly +-@item @samp{Discard} +-@item @samp{Integer}, @samp{Word}, @samp{Cardinal} are now equivalent to @samp{PtrInt}, @samp{PtrWord}, @samp{PtrCard}, no more (necessarily) to C's @samp{int} and @samp{unsigned int} (@@) +-@item new types @samp{CInteger}, @samp{CWord}, @samp{CCardinal} +-@item new make variable @samp{GPC_PAGESIZE} to set the page size when building the manual (PDF, PostScript, DVI) +-@item @samp{qualified} and import lists are no more allowed after @samp{uses} (only after @samp{import}, as EP demands) (@@) +-@item the @samp{GMP} unit doesn't support gmp-2.x anymore (if you used it, just upgrade to a newer GMP version) (@@) +-@item conflicts between object fields/methods and ancestor type names are detected as required by OOE (fjf945*.pas) (@@) (O) +-@item repeated function headings (in @samp{forward} declarations and interfaces) are checked stricter: if one has a result variable, so must the other (according to the OOE draft) (@@) (O) +-@item the @samp{Pipe} unit was renamed to @samp{Pipes} because of a name conflict (@@) +-@item empty parameter lists can be written as @samp{()} (chief54*.pas, delphi6*.pas) (D) +-@item GMP unit: @samp{mpf_sin}, @samp{mpf_cos} +-@item the test suite output is now by default stored in DejaGnu compatible files @file{gpc.log} and @file{gpc.sum} in the @file{p/test/} directory; other available test targets are @samp{pascal.check-short} and @samp{pascal.check-long} (@@) +-@item new options @samp{-W[no-]dynamic-arrays} (fjf931*.pas) +-@item new argument to @samp{_p_initialize} (@@) +-@item @samp{UMask} +-@item new option @samp{--no-debug-source} +-@item new lexer (no directly user-visible difference, but should allow for better handling of lexer-based problems in the future) +-@item @samp{CompilerAssert} (fjf904*.pas) +-@item options @samp{--[no]-assert} renamed to @samp{--[no]-assertions} (necessary to avoid a conflict with GCC) (@@) +-@item new options @samp{--[no-]range-checking}, also as short compiler directives @samp{@{$R+@}}/@samp{@{$R-@}} (default is on) (C, E, B, @@) +-@item new options @samp{--[no-]methods-always-virtual} (fjf903*.pas) (M) +-@item new options @samp{--[no-]pointer-arithmetic}, @samp{--[no-]cstrings-as-strings}, @samp{-W[no-]absolute} (all of which @samp{--[no-]extended-syntax} implies) +-@item @samp{Integer2StringBase}, @samp{Integer2StringBaseExt} +-@item new constants @samp{NumericBaseDigits}, @samp{NumericBaseDigitsUpper} +-@item allow assigning, passing by value and returning objects, with assignments of an object of derived type to one of a base type (chief35[ab].pas, fjf451*.pas, fjf696[ef].pas, fjf884*.pas), BP compatible except for a bug in the BP feature itself (see the comment in @file{p/test/fjf451h.pas}) (B) +-@item new options @samp{-W[no-]object-assignment} +-@item warn (except in @samp{--borland-pascal}) if a virtual method overrides a non-virtual one (chief52*.pas) +-@item warn when an non-abstract object type has virtual methods, but no constructor (chief51*.pas) +-@item @samp{--maximum-field-alignment} does not apply to @samp{packed} records +-@item @samp{ArcSin}, @samp{ArcCos} +-@item trimming string relations as functions (@samp{EQPad} etc.) (fjf873.pas) +-@item new options @samp{-W[no-]interface-file-name} +-@item @samp{SeekEOF} and @samp{SeekEOLn} use @samp{Input} implicitly when no file is given (fjf871.pas) (B) +-@item tagging feature for @samp{with} statements (tom6.pas) <200012022215.eB2MFD614424@@wsinpa16.win.tue.nl> (Sun Pascal) +-@item new option @samp{--sun-pascal} +-@item field names and array indices in initalizers are recognized (waldek5*.pas) (options @samp{-W[no-]field-name-problem} removed, @@) +-@item object directives @samp{published}, @samp{public} (both equivalent), @samp{protected} (scope limited to object type and derived object types), @samp{private} (scope limited to current unit/module) (fjf864*.pas) (options @samp{-W[no-]object-directives} removed, @@) +-@item the operator precedence and associativity of @samp{+} and @samp{-} is now as defined in EP by default (and as in BP with @samp{--borland-pascal}) (fjf863*.pas) (@@) +-@item @samp{Integer (16)} etc. changed to @samp{Integer attribute (Size = 16)} (works for integer and Boolean types) (fjf861.pas) (@@) +-@item types can have attributes (note: no preceding @samp{;}) (fjf860*.pas) +-@item dynamic object methods (fjf859.pas) (B) +-@item in @samp{--borland-pascal} mode, @samp{Assign} unconditionally (re-)initializes its file parameter (fjf858.pas) (B) +-@item GPC doesn't use @file{gpm} files anymore (instead, each module has an implicit @file{@var{modulename}-all.gpi} interface which is a regular @file{gpi} file) +-@item make the program/module/unit finalizers non-public (@samp{static} in C sense), omit them if easily possible +-@item new options @samp{-W[no-]parentheses} (fjf848*.pas) +-@item non-@samp{interface} modules with empty implementation part (pmod1.pas, fjf843.pas) +-@item @samp{maximum-field-alignment} and @samp{[no-]field-widths} work as local compiler directives now (fjf842.pas) +-@item dropped @samp{@{$debug-statement@}} (should not be necessary anymore, now that debug info mostly works) +-@item new options @samp{--[no-]longjmp-all-nonlocal-labels} +-@item object methods can have attributes (fjf826*.pas) +-@item new attributes @samp{iocritical} (fjf824*.pas), @samp{ignorable} (fjf839*.pas) for routines +-@item dropped computed @samp{goto} (never worked for nonlocal @samp{goto} into the main program, implementing it would be quite difficult, probably not worth it) (@@) +-@item new type @samp{AnyFile} for parameters and pointer targets (fjf821*.pas) +-@item @samp{TimeStamp} is now a packed record as EP demands (fjf975b.pas) (E) +-@item Mac Pascal specific features are supported according to the dialect options (M) +-@item @samp{--interface-only} does not require @samp{-S} or @samp{-c} anymore (and does not create an object file) +-@item @samp{initialization}, @samp{finalization} (D) +-@item @samp{TimeZone} in @samp{TimeStamp} counts seconds @emph{east} of UTC now (not west, as before) (datetimedemo.pas) (@@) +-@item @samp{export @var{Foo} = all (@dots{})} (fjf811*.pas) +-@item new options @samp{-W[no-]local-external} (implied by @samp{-Wall}) +-@item type-casts are BP compatible now, in particular, value type-casts between ordinal and real or complex types don't work anymore (B) (@@) +-@item all non-ISO-7185 keywords can be used as identifiers (with two small exceptions) (fjf440.pas) +-@item @samp{pack-struct} does not imply bit-level packing anymore (only explicit @samp{packed} records and arrays do) (@@) +-@item new options @samp{--[no-]ignore-packed} (@samp{--ignore-packed} is the default in BP mode) (fjf796*.pas) (B) (@@) +-@item new option @samp{--maximum-field-alignment=@var{N}} +-@item new options @samp{@{$[no-]pack-struct@}} as a compiler directive +-@item @samp{attribute} for routines doesn't imply @samp{forward} anymore (so you don't have to declare routines twice in a program or implementation part when setting the linker name or some other attribute) (@@) +-@item @samp{static}, @samp{volatile} and @samp{register} for variables and @samp{inline} for routines are no prefix-directives anymore, but @samp{attribute}s (@@) +-@item combining several dialect options (such as @samp{--extended-pascal --borland-pascal}) doesn't work anymore (what should this mean, anyway? Combine the features, but also the warnings from both!?!?!?) (@@) +-@item @samp{external} without @samp{name} defaults to all-lowercase now (@@) +-@item @samp{c}, @samp{c_language} and @samp{asmname} are deprecated (@@) +-@item @samp{external name 'foo'} (fjf780.pas), @samp{external 'libname' name 'foo'} (where @samp{libname} is ignored) (B) +-@item Mac Pascal directives @samp{definec}, @samp{macro}, @samp{undefc}, @samp{ifc}, @samp{ifoptc}, @samp{elsec}, @samp{elifc}, @samp{endc}, @samp{errorc} (treated as equivalent to the corresponding existing ones) (M) +-@item units without @samp{implementation} part (M) +-@item new options @samp{--vax-pascal}, @samp{--mac-pascal} +-@item attributes @samp{const} for variables and @samp{name} for variables, routines and modules; assembler names and module/unit file names can now be expressions (which must yield string constants) (fjf781*.pas, fjf809*.pas) +-@item the utilities @samp{gpidump} and @samp{binobj} are installed with GPC (B) +-@item new options @samp{-W[no-]identifier-case}, @samp{-W[no-]identifier-case-local} (fjf751*.pas) +-@item new compiler directive @samp{$R foo}, equivalent to @samp{$L foo.resource} (B) +-@item dropped @samp{--[no-]borland-char-constants} (now simply coupled to dialect options) (@@) +-@item test suite: support progress messages (@samp{TEST_RUN_FLAGS=-p} from the Makefile; @samp{-p} in testgpc); see @uref{http://fjf.gnu.de/misc/progress-messages.tar.gz} +-@item @samp{=} and @samp{<>} comparisons of structures (arrays, records, ...) except strings and sets are forbidden now (@@) (E) +-@item irrelevant operands and arguments (e.g.: @samp{foo in []}; @samp{bar * []}; @samp{Im (baz)} if @samp{baz} is of real type) are not necessarily evaluated anymore (which is allowed by the standard); instead, a warning is given if they have side-effects (@@) +-@item accept only one program, unit, module interface or implementation or a module interface and the implementation of the same module in one file; new options @samp{--[no-]ignore-garbage-after-dot} (fjf735*.pas) (@@) +-@item new options @samp{-W[no-]implicit-io} (fjf734*.pas) +-@item new options @samp{--enable-keyword}, @samp{--disable-keyword} (fjf733*.pas) +-@item @samp{CBoolean} (fjf727.pas) +-@item dropped the usage of @samp{GetMem} as a function with one parameter (only the BP compatible usage as a procedure with two parameters remains) (@@) +-@item accessing the variable @samp{FileMode} now requires using the @samp{GPC} (or, for BP compatibility, the @samp{System}) unit (@@) +-@item @samp{DupHandle} +-@item dropped the predefined dialect symbols @samp{__CLASSIC_PASCAL__}, @samp{__STANDARD_PASCAL__}, @samp{__EXTENDED_PASCAL__}, @samp{__OBJECT_PASCAL__}, @samp{__UCSD_PASCAL__}, @samp{__BORLAND_PASCAL__}, @samp{__DELPHI__}, @samp{__PASCAL_SC__} and @samp{__GNU_PASCAL__} (one can use @samp{@{$ifopt borland-pascal@}} etc. instead) (@@) +-@item @samp{Succ}, @samp{Pred}, @samp{Inc}, @samp{Dec} for real numbers (fjf714*.pas) +-@item use environment variables @samp{GPC_UNIT_PATH}, @samp{GPC_OBJECT_PATH} +-@item new options @samp{-W[no-]float-equal} +-@item new option @samp{--ucsd-pascal} +-@item dropped the syntax @samp{type foo = procedure (Integer, Real)} (i.e., without parameter names) (@@) +-@item CRT: new argument @samp{On} to @samp{CRTSavePreviousScreen} +-@item @samp{SetUserID}, @samp{SetGroupID} +-@item @samp{HeapChecking} +-@item new built-in procedure @samp{Assert}; new options @samp{--[no]-assert} (also @samp{@{$C+@}}, @samp{@{$C-@}} for Delphi compatibility) (fjf665*.pas) (D) +-@item @samp{ProcessGroup} +-@item StringUtils: @samp{QuoteEnum} +-@item @samp{CurrentRoutineName} (fjf752.pas) +-@item TFDD: new unit +-@item gpc-run: new options @samp{-e FILE} and @samp{-E FILE} (redirect/append standard error) +-@end itemize +- +-Have fun, +- +-The GNU Pascal Development Team +diff -urN gpc-20060325/p/doc/en/reference.texi gpc-20070904/p/doc/en/reference.texi +--- gpc-20060325/p/doc/en/reference.texi 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/doc/en/reference.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -276,6 +276,7 @@ + * Read:: + * ReadLn:: + * ReadStr:: ++* ReadString:: + * Real:: + * record:: + * Release:: +@@ -324,6 +325,7 @@ + * Str:: + * String:: + * String2CString:: ++* StringOf:: + * SubStr:: + * Succ:: + * Text:: +@@ -9298,10 +9300,14 @@ + object type and can be accessed via @samp{TypeOf}. + + @samp{Size} contains the size of the object type, @samp{NegatedSize} +-contains the size negated (for runtime checks). @samp{Parent} +-contains a pointer to the parent type's VMT (or nil if the type has +-no parent). @samp{Name} points to a string containing the type's +-name. ++contains the size negated (for optional runtime checks). ++@samp{Parent} contains a pointer to the parent type's VMT (or nil if ++the type has no parent). @samp{Name} points to a string containing ++the type's name. ++ ++For abstract object types, @samp{Size} contains 0 and ++@samp{NegatedSize} contains -1, so they will always fail the runtime ++check. + + @subheading Conforming to + +@@ -10163,6 +10169,24 @@ + + @subheading See also + ++@c ---------------------------------------------------------------------------- ++ ++@node ReadString ++@unnumberedsec ReadString ++@cindex ReadString ++ ++ ++@subheading Description ++ ++@samp{ReadString} is an alternative name for @samp{ReadStr} ++ ++@subheading Conforming to ++ ++@samp{ReadString} is a Mac Pascal extension. ++ ++@subheading See also ++ ++@ref{ReadStr} + + @c ---------------------------------------------------------------------------- + +@@ -12123,6 +12147,40 @@ + + @subheading See also + ++@c ---------------------------------------------------------------------------- ++ ++ ++@node StringOf ++@unnumberedsec StringOf ++@cindex StringOf ++ ++@subheading Synopsis ++ ++@smallexample ++function StringOf (@var{values_and_format_specifications}): String; ++@end smallexample ++ ++@subheading Description ++ ++@samp{StringOf} prints its arguments to an internal buffer and returns ++resulting string. Value and format specifications are handled exactly ++the same as in @samp{Write} or @samp{WriteStr}. ++ ++@subheading Conforming to ++ ++@samp{StringOf} is a Mac Pascal extension. ++ ++@subheading Example ++@smallexample ++program StringOfDemo; ++begin ++ writeln(StringOf('2 * 2 = ', 2 * 2)) ++end. ++@end smallexample ++ ++@subheading See also ++ ++@ref{Write} @ref{WriteStr}. + + @c ---------------------------------------------------------------------------- + +diff -urN gpc-20060325/p/doc/en/todo.texi gpc-20070904/p/doc/en/todo.texi +--- gpc-20060325/p/doc/en/todo.texi 2006-03-25 03:15:53.000000000 +0100 ++++ gpc-20070904/p/doc/en/todo.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -197,6 +197,26 @@ + @ref{News}. + + @itemize @bullet ++@item 20070903: Prevent multiple evaluation of some string expressions ++(roland2.pas). ++@item 20070903: Correct range checking for `Succ' and `Pred' applied to ++enumerations (`fsc2[24].pas') on 64-bit machines. ++@item 20070903: Check that procedures assigned to constant variables ++are not nested (did not work with 4.x backends) (nicola4c.pas). ++@item 20070903: On 64-bit machines range check for small unsigned subranges ++failed to work (range2.pas and chuck6.pas). ++@item 20070902: Allow copy on function values (copy1.pas). ++@item 20070831: Do not ICE on break outside loop (affected 4.x backends) ++(russ5[ab].pas). ++@item 20070830: Fix crash for some initializers (affected 4.x backends) ++(igor2.pas). ++@item 20060830: Allow jumps into blocks when `--no-iso-goto-restrictions' ++is in force (goto9[cd].pas). ++@item 20060722: Some initializers with nested strings were rejected ++(velo1.pas). ++@item 20060519: Correct some build problems. ++@item 20060505: Local `R-' option affected rest of the file (gale12[a-h].pas). ++@item 20060424: Handle empty string in InternalStringOf (stro2.pas). + @item 20060304: Do not allow passing strings to parameters of type array of + char subrange (avoids passing out of range values). + @item 20060228: Use at least integer precision for arithmetic (avoids +diff -urN gpc-20060325/p/doc/en/todo.texi~ gpc-20070904/p/doc/en/todo.texi~ +--- gpc-20060325/p/doc/en/todo.texi~ 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/doc/en/todo.texi~ 1970-01-01 01:00:00.000000000 +0100 +@@ -1,424 +0,0 @@ +-@c Copyright (C) 2002-2006 Free Software Foundation, Inc. +-@c For copying conditions, see the file gpc.texi. +-@c This file is part of the GPC Manual. +-@c +-@c Author: Frank Heckenbach +-@c +-@c Last modification: 2006-02-02 (file up to date) +- +-@node To Do +-@chapter The GNU Pascal To-Do List. +- +-This is the To-Do list for the GNU Pascal Compiler. +- +-The GNU Pascal development team is constantly working on making GNU +-Pascal more reliable and more comfortable. However, there are some +-known bugs which will take some time to be fixed (any help +-welcome!), and we do not want to hide them from you. You might also +-be interested to know what features are planned to be implemented in +-the future. This list is meant to keep track of the known bugs and +-wanted features of GPC. +- +-If you want to report a new bug or suggest a new feature, the best +-way to do it is in the mailing list. This way, other GPC users can +-provide additional ideas, perhaps work-arounds for bugs, and the GPC +-maintainers can sooner start to think about how to solve the +-problem. The GPC mailing list is @email{gpc@@gnu.de}. To subscribe, +-send the command @samp{subscribe gpc your@@email.address} in the +-body of a mail to @email{majordomo@@gnu.de} (the subject is +-ignored). An archive of the mailing list can be found at +-@uref{http://www.gnu-pascal.de/crystal/gpc/en/}. +- +-The list changes regularly. The present version refers to the +-current GPC snapshot, @value{GPCVersion}. +- +-This list is part of the GNU Pascal Manual, included in GPC +-distributions and snapshots. You can always browse the most current +-version of the list on GPC's WWW page. If you check the To-Do list +-regularly you can decide if and when to try a new snapshort. +- +-@menu +-* Known Bugs:: Known bugs in GPC +-* Planned Features:: Features planned for GPC +-* Fixed Bugs:: Fixed bugs +-@end menu +- +-@node Known Bugs +-@section Known bugs in GPC +- +-In this section, you can find information about GPC bugs that are +-known to the developers. +- +-If you encounter a bug with GPC, please check whether it is one of +-the known bugs. If not, report it to the GNU Pascal mailing list. +-(But always report if you solve the problem! :@minus{}) +- +-Solved problems are moved to ``Fixed Bugs'' (@pxref{Fixed Bugs}), +-and implemented features to the ``News'' chapter (@pxref{News}). +- +-A message ID (like @samp{<42@@foo.bar>}) refers to a message in the +-GPC mailing list or a newsgroup where the topic was discussed (often +-a bug report). A note of the form @file{(xy20001231)} refers to an +-internal message of the GPC developers. A file name like +-@file{(foo42.pas)} refers to the according program in the GPC test +-suite included in the GPC source distribution. +- +-@itemize @bullet +-@item @samp{setlimit} is applied when it shouldn't be ((a) variable/constant declarations, (b) @samp{set of ShortCard}) ??? +-@item dynamic sets don't work +-@item there are some bugs with mathematical functions; GPC fails, for example, the Paranoia test (@uref{http://www.netlib.org/paranoia/index.html}) +-@end itemize +- +-@node Planned Features +-@section Features planned for GPC +- +-In the following sections, you can find informations about features +-which have been suggested and/or discussed for inclusion into GPC, +-usually in the GPC mailing list. The division into the sections and +-the names of the sections may change when this seems useful. The +-entries within each section are in no particular order. +- +-Some of the entries may be a bit difficult to read. Double question +-marks (@samp{??}) within the entries mean that it's not yet clear +-how to do the thing. Triple question marks (@samp{???}) mean that +-it's not clear whether to do it at all. ;@minus{}) +- +-@menu +-* Planned - Strings:: String types +-* Planned - OOP:: Object oriented programming extensions +-* Planned - Other types:: Other types +-* Planned - Misc:: Miscellaneous GPC topics +-* Planned - Utilities:: Useful utilities for GPC +-@end menu +- +-@node Planned - Strings +-@subsection Planned features: Strings +- +-@itemize @bullet +-@item const/var @samp{AnyString} parameters and pointers (records internally, cf. gpc.pas) (GetCapacity; only for var parameters) +-@item @samp{SetLength} for non-Pascal string types; use truncate-flag +-@item make work on all string types: string functions from @file{rts/string*.pas}, @samp{Concat}/@samp{+} (Optimize @samp{s := s + ch}) (fh19971105) +-@item option @samp{--arrays-of-char-as-cstrings=@{none,zero-based,all@}} to allow assigning [zero-based] arrays of char to cstring variables (warning otherwise) (cstrini2.pas); make padding of those arrays in initialized variables and in assignments dependent on this switch (fh19970921) (fjf57.pas, ok) and if the length matches exactly, give a warning (fh19971013) (cstrassign.pas); pass those arrays as cstrings in read*, write*, str (P_*STRING; current length=-1 in two places); compile time warning (and treatment as non-zero-based) if it's not clear at compile time if a conformant array or schema is zero-based or not, and an operation depends on this in the zero-based state +-@item Short strings (Length, Capacity) and switches (tc19980326.2,tc19980327); allow @samp{type x=string} (undiscriminated) when switch is set so that strings don't default to length 255 (fh19971113) (cf. fjf97.pas); don't add a #0 terminator when passing as a CString parameter (automatically use String2CString) +-@item automatically convert CStrings to Strings? +-@item general switch @samp{--bp-strings} +-@item ``wide'' characters +-@item open array/string parameters (@samp{$P}, @samp{$V} in BP; undocumented @samp{OpenString} identifier in BP) +-@item variables of type undiscriminated schema/strings -> remove pointers to string constants; functions returning undiscriminated schemata (pg19980813.3) +-@end itemize +- +-@node Planned - OOP +-@subsection Planned features: OOP +- +-@itemize @bullet +-@item Object Oriented Extensions draft, Delphi; @samp{class}; allow classes and object types to inherit from each other; <01BD7A3A.6B187A20.prucha@@helicon.co.at>; @file{obpascal.zip} +-@item error/exception handling (Java, Delphi?) <01BD7A3A.6B187A20.prucha@@helicon.co.at> (tc20000623) +-@item method pointers/procedural variables (@samp{procedure/function of object}) (-> Delphi) ??? +-@item destructor: reset VMT link to nil ??? +-@item @samp{@var{class} is @var{class}} (implemented in Pascal with @samp{Parent}) +-@item BP compatible dynamic method dispatcher ?? ??? +-@item @samp{New}: Delphi syntax; Dispose?? (automatically?; set references automatically to nil) (-> FPC) +-@item @samp{--base-class=foo}, @samp{--base-object=bar} ??? +-@item properties <01BD7A3A.6B187A20.prucha@@helicon.co.at>, <16131.199805071354@@potter.cc.keele.ac.uk> +-@item VMTs (also for local classes (EP modules???)!) in GPI files, written to assembler file by main program; @samp{--cfiles=foo}: .s file with VMTs for C/assembler??? (also .h???) +-@item method overloading ??? ?? +-@item interfaces (cf. OOE, Java); @samp{@var{obj} is @var{interface}} (not so easy?) ???; variables of type pointer to more than one interface [and class] (also possible!); VMT problem with interfaces (my solution??? also with dynamic linking???) +-@item virtual constructors; in interfaces (load)??? +-@item VMT: Children: list of pVMT +-@item VMT: object constants, class variables; virtual/static +-@item VMT: ClassID (64/128 bits?) default 0, error when duplicated, warning when 0 and inherited from class with <>0 ?, not allowed for abstract classes!; ClassName (also for abstract classes?); []; ProgrammerID, BaseClassID at beginning of unit (redeclarable?); find class by ClassID/ClassName (implementable in Pascal with @samp{Children}); store in GPI: whether ClassID used, ClassName used, which classes are instantiated ??? +-@end itemize +- +-@node Planned - Other types +-@subsection Planned features: Other types +- +-@itemize @bullet +-@item variant records: EP: check that all values of tag-type have exactly one matching variant +-@item automatically detected upper array bounds in structured constants/intialized variables (-> PXSC) +-@item UCSD Pascal's @samp{Integer[n]} ??? BCD? +-@item @samp{SELECTED_REAL_KIND} for real types (cf. Fortran, drf) ?? ??? +-@item general subtypes ??? +-@item type-cast operators ??? +-@item read/write operators ??? +-@item read Booleans and enum types from files, write enum types to files ??? +-@item sparse sets; sets of arbitrary types ?? ??? +-@item initalization and finalization code for arbitrary types (e.g. GMP types) +-@item resize schemata (cf. @samp{SetLength} in Delphi) +-@item @samp{ShortComplex}, @samp{LongComplex} +-@item keep files in FDRList while they live, not only while they're open, so @samp{DoneFDR} can be applied to all of them ??? +-@item improve TFDDs +-@item generic types (cf. OOE section C.1) (gentypes.pas) ??? +-@end itemize +- +-@node Planned - Misc +-@subsection Planned features: Misc +- +-@itemize @bullet +-@item checking of overflows, variants etc.; check that strings converted to CStrings don't contain #0 characters; initialize strings (length field), pointers, ordinal values and reals(?) with invalid values if checking is on +-@item warn about using uninitialized variables (kevin2.pas), especially for strings, also for @samp{for}-loop counters after the loop (EP 6.8.1) +-@item transpose arrays (Fortran)? <918557$mke$1@@nnrp1.deja.com> +-@item inline functions in GPI files +-@item options to warn about everything that could cause portability problems +-@item libraries (static/shared; DLL) +-@item smart linking (split @file{foo.s}, as @file{foo*.s}, ar @file{foo*.o} or split @file{foo.o}) +-@item overloading of unary operators (@samp{+}, @samp{-}, @samp{not}) ??? +-@item function overloading (in units and static methods?? -- with different parameters, override or overload?); linker name?? (perhaps: first occurrence of a procedure with normal name (=> all non-overloaded procedures get normal names)?); cf. Delphi methods without @samp{override} +-@item @samp{for var: type = foo to bar do} ??? +-@item default parameters (cf. OOE section C.4; Delphi 4?) (iniparm[12].pas) +-@item variable number of arguments <32F9CFE7.5CB@@lmemw.ericsson.se> ?? ??? +-@item multithreading support ?? ??? +-@item @samp{--wirth-pascal} :@minus{}) +-@item PXSC standard @dots{} (@file{pxsc.zip}, @file{contrib/peter/pxsc}) (??) +-@item Pascal++ standard @dots{} (??) ??? +-@item Delphi features: CompToCurrency, CurrencyToComp, Slice, TypeInfo ???, dynamic arrays (tc19991012) +-@item output column numbers in error messages ?? +-@item debug info: @samp{with} statements +-@end itemize +- +-@node Planned - Utilities +-@subsection Planned features: Utilities +- +-@itemize @bullet +-@item @samp{gp} make utility to replace automake; @samp{external @var{lib}} like @samp{$L} (-> BP, Delphi) ?? (fh19990325.2) +-@item @samp{pas2texi} <200301290441.FAA30843@@goedel.fjf.gnu.de> +-@item C header to Pascal translator +-@item gdb: Pascal types (sets, files, subranges, schemata, @dots{}) +-@item @samp{indent}-like source code formatter for Pascal +-@item AT&T <-> Intel assembler syntax converter (-> BP BASM) ??? +-@end itemize +- +-@node Fixed Bugs +-@section Problems that have been solved +- +-This section lists the bugs fixed since the last (non alpha/beta) +-GPC release, together with the date (YYYYMMDD) on which they were +-fixed, so you can check if some problem has already been solved in a +-recent release or developer version. For new features, see +-@ref{News}. +- +-@itemize @bullet +-@item 20060214: Avoid ICE on unimplemented operators (ice4.pas) +-@item 20060214: Avoid ICE on bad forward declaration (ice3.pas) +-@item 20060214: ISO-10206 requires at least one output parameter +-in `ReadStr' (rstr2a.pas) +-@item 20060213: Allow side effects in arguments of `ReadStr' (rstr1.pas) +-@item 20060213: Correctly pass substrings to `StringTFDD_Reset' (fjf1099.pas) +-@item 20060213: Avoid ICE on multiple errors with set constants (constv2c.pas) +-@item 20060213: Avoid ICE on bad parent class (delc.pas) +-@item 20060212: fix passing of multiple string values to `const' conformant +-arrays (confa2.pas) +-@item 20060212: Avoid ICE on invalid conformant arrays (confa3.pas) +-@item 20060212: Avoid confusing initialized variant records with conformal +-arrays (confa1.pas) +-@item 20060212: Avoid ICE on invalid set argument (sets16a.pas) +-@item 20060212: Avoid ICE on incompatible arguments in binary operators +-@item 20060212: gpc rejected some valid strings arguments (peter8.pas) +-@item 20060208: In ISO modes check identifier scopes stricter in record +-types and parameter lists (gale7[a-m].pas, gale8[a-u].pas) +-@item 20060203: Fix problems with strange characters in some versions +-of ncurses +-@item 20060130: In ISO modes report out of range constants only at runtime +-(range1.pas) +-@item 20060130: make set literals and packed sets compatible (sets17a.pas) +-@item 20060128: check `type of' argument more strictly in ISO modes +-(gale9[abc].pas, gale10.pas, gale11[a-d].pas) +-@item 20060128: in ISO-7185 mode require that program parameters are files (pparm1.pas) +-@item 20060128: require digit after decimal point in ISO modes (real2.pas) +-@item 20060128: in ISO modes allow sets inside packed records and arrays (pack13.pas) +-@item 20060128: in ISO modes require parameters to `read' and `write' +-(read3.pas, write3.pas) +-@item 20060127: allow string literals in ISO-7185 mode (const1.pas) +-@item 20060127: allow empty ranges in set constructors (sets18.pas) +-@item 20060127: correct comparison of sets (sets15.pas) +-@item 20051118: avoid crash when preprocessing (prep1a.pas) +-@item 20051118: define `__OS_DOS__' on Dos and Windows +-@item 20051118: fix spurious warning about `-Wuninitialized' +-@item 20051114: fix passing discriminated string schema +-@item 20051105: constructor calls inside constructors and destructor +-calls inside destructors +-@item 20051104: allow testing when different GPC version using the same +-backend is already installed +-@item 20051025: correctly parse @samp{import foo; uses qualified;} +-(waldek15.pas) +-@item 20051021: accept @samp{--no-methods-always-virtual} +-@item 20051021: nonlocal jump fixes for 3.2.x and 3.3.x +-@item 20051021: fix bootstrap with C++ and 3.3.x +-@item 20051021: allow one element sets in non-iso dialects (delset.pas) +-@item 20051021: do not crash on wrong open array parameter (waldek13.pas) +-@item 20051014: `forward', `near' and `far' may be redeclared in all dialects +-@item 20051014: Integer2StringBaseExt now works in 64-bit machines +-(mir048[cd].pas) +-@item 20051014: do not crash on bad declarations (dimwit1.pas, dimwit3.pas, +-dimwit5.pas) +-@item 20051014: avoid calling fcntl if not present (fjf1042b.pas, fjf1042c.pas +-on Mingw32) +-@item 20051014: sorting set initializers used wrong comparison function +-(affected Solaris) +-@item 20051014: avoid range-check failure in RTS on strict alignement +-machines (affected at least Sparc and HP) +-@item 20051014: mod in schema initializer (modtest.pas) +-@item 20051014: avoid spurious side effects in initializers do to +-range-checking (fjf1021[dh-k].pas) +-@item 20051014: fix bootstrap with Ada and 3.4.x +-@item 20051014: fix bootstrap with 3.2.x +-@item 20050325: check initializers of unused types (fjf898*.pas) +-@item 20050325: check identifier scopes stricter (az25.pas, fjf1059*.pas) +-@item 20050321: in @samp{--borland-pascal} give only a warning, not an error, for duplicate @samp{case} elements (drf6*.pas) +-@item 20050320: multi-dimensional @samp{packed} arrays are not correctly packed (fjf149*.pas) +-@item 20050316: check arithmetical overflow in constants somewhat better (fjf206*.pas) +-@item 20050316: check duplicate external declarations stricter (fjf948.pas) +-@item 20050312: check that actual discriminants match in parameters and assignments, and in strict EP mode, check that actual discriminants of parameters within one identifier list match (berend4.pas, fjf104[45]*.pas, typeof[2-4].pas) +-@item 20050312: check pointer to schema types stricter (fjf130.pas, fjf614.pas, schema3a.pas affected) +-@item 20050311: allow importing the same value as a result of distinct expressions under the same name for EP modules for ordinal, pointer, string and set constants (fjf1040*.pas, stef1.pas) +-@item 20050307: allow attributes for procedural types (chief56.pas) +-@item 20050307: problem with string operations and @samp{goto} (contour0.pas, contourbug.pas, martin1.pas, berend3.pas) +-@item 20050307: check @samp{goto} targets more strictly <261020020000077022%gpaeper@@empirenet.com>, (az48.pas, fjf701*.pas, fjf1038*.pas, gale6.pas) +-@item 20050307: @samp{Result} is not completely Delphi compatible (fjf1022*.pas) +-@item 20050307: problem if a @samp{Write} or @samp{WriteLn} argument calls a routine which writes to the same file (fjf1036.pas) +-@item 20050302: @samp{Update} as well as writing after reading or checking @samp{EOF} can get the file position wrong in some cases (arp2*.pas, fjf159.pas, fjf160*.pas) +- +-@item 20050217: declaring a procedure in the implementation with the same name as an imported procedure doesn't work (chief18.pas), detect name collisions between imported EP modules (mod9.pas) +-@item 20050214: warn if an lhs cast decreases alignment (avo9.pas) +-@item 20050214: don't require result variables in forward declarations except in strict ISO mode (marku10*.pas) +-@item 20050213: writing to a file buffer at EOF doesn't work (eof1.pas) +-@item 20050211: don't allow @samp{f^} for unopened files @samp{f} (pcerror[ij].pas) +-@item 20050210: evalute initializers exactly as often as specified (fjf1019.pas) +-@item 20050205: initialized types in record and object fields and in schemata (inirec[24].pas, fjf1016*.pas) +-@item 20050130: in standard Pascal modes, @samp{EOF} is false on an empty file (tom7.pas) +-@item 20050127: wrong @samp{arithmetical overflow} with @samp{set of byte} (igor1.pas) +-@item 20050119: types and initializers containing variable expressions, including schemata with non-constant discriminants and global variables of dynamic size (couper[45].pas, fjf186.pas, fjf548.pas, fjf612a.pas, fjf997*.pas, fjf1003*.pas, john1a.pas) +-@item 20050117: @samp{pow}, @samp{Trim}, @samp{Card}, set operations (@samp{-}, @samp{*}, @samp{><}) and comparisons as well as string comparisons and array slices with constant arguments cannot be used in constants (fjf998*.pas, fjf1000*.pas, fjf1009*.pas) +-@item 20050117: @samp{ParamStr} evaluates its argument twice (fjf963b.pas) +-@item 20050106: user-defined operators must not be applied to implicit operations (fjf991.pas and many other cases) +- +-@item 20041203: accessing components of a constant (EP) constructor (indexed by a constant for arrays) must yield a constant again (dave3*.pas) +-@item 20041202: GPC crashes when using two variables with identically-named fields in a single @samp{with} statement (withbug.pas) +-@item 20041125: GPC doesn't accept @samp{case} statements without case-list-elements (fjf982*.pas) +-@item 20041125: gcc-3.x: options are wrongly reordered (so, e.g., @samp{--gnu-pascal -Wno-underscore} doesn't work as expected) (avo7.pas) +-@item 20041124: applying @samp{not} to a function result in parentheses doesn't work (avo6.pas) +-@item 20041123: packed array indices containing @samp{mod} don't work (avo4.pas) +-@item 20041120: GPC sometimes prints @samp{???} instead of the actual file name in messages +-@item 20041028: function results (of record type) must not be allowed as @samp{with} elements (only a warning in @samp{--delphi} and @samp{--mac-pascal} modes for compatibility); fields of non-lvalue @samp{with} elements must not be lvalues either (fjf493*.pas) +-@item 20041022: value parameters of type @samp{String} (undiscriminated) must take the capacity of the actual parameter, according to EP (waldek11*.pas) +-@item 20041021: initialized types in arrays (fjf233.pas, fjf974*.pas) +-@item 20041020: initializers are ignored in @samp{New} and @samp{Initialize} (fjf967[j-l].pas) +-@item 20041020: the address of global routines is not allowed in initializers (avo2*.pas) +-@item 20041015: @samp{Index} and @samp{Pos} cannot be used in constant expressions (fjf970*.pas) +-@item 20041012: initializers of variant records don't work (fjf259.pas), (peter6.pas) +-@item 20041012: initializers of packed arrays don't work (emil5.pas) +-@item 20041007: the @samp{__FILE__} and @samp{__BASE_FILE__} macros should return full paths +-@item 20041006: @samp{Sqr} sometimes evaluates its argument twice (fjf963a.pas) +-@item 20041004: memory leak in routines with a local variable of file type that are left via @samp{Exit} or @samp{Return} (fjf962.pas) +-@item 20040916: using a Boolean function as a condition in a @samp{repeat} loop doesn't work correctly (artur1*.pas) +-@item 20040913: overstrict type-checking in comparisons involving procedural types (fjf960*.pas) +-@item 20040908: @samp{Read}, @samp{Write} etc. evaluate its arguments in the wrong order (az43*.pas) +-@item 20040908: @samp{Read} etc. evaluate references to string parameters twice (fjf958.pas) +-@item 20040907: on targets with 16 bit @samp{Integer} type, the @samp{MicroSecond} field of @samp{TimeStamp} causes a compilation error +-@item 20040907: character arrays indexed by non-integer ordinal types treated as strings cause internal compiler errors (fjf957*.pas) +-@item 20040906: @samp{-W[no-]cast-align} does not work (fjf956*.pas) +-@item 20040903: in @samp{FormatTime} @samp{%Z} and @samp{%z} unless provided by system library ignore DST +-@item 20040710: powerpc: @samp{--strength-reduce} doesn't work with @samp{for} loops (was kludged before, fixed in gcc-3.3.3) +-@item 20040710: AIX: @samp{ReturnAddress} doesn't work after use of dynmamic variables (backend bug, fixed in gcc-3.3.3) +-@item 20040622: functions returning sets are called twice if range-checking is on (inga1*.pas) +-@item 20040512: @samp{pow} and @samp{**} are really EP conformant now (in particular @samp{x pow y} and @samp{x ** y} are an error if x = 0 and y <= 0) (emil27*.pas) +-@item 20040511: bug with @samp{absolute} variables in strange situations (waldek8.pas) +-@item 20040511: @samp{protected var} parameters must only accept references (unlike @samp{const} parameters) (gale5*.pas) +-@item 20040507: @samp{pack} must not pack the component type of arrays (fjf940[b-e].pas) +-@item 20040507: in some circumstances packed fields are allowed as @samp{var} parameters (fjf940a.pas) +-@item 20040427: parameters of procedural types don't support Standard Pascal procedural parameters, conformant/open arrays and @samp{type of} inquiries (fjf939*.pas) +-@item 20040422: bugs with nonlocal gotos out of routines declaring file variables (nonloc*.pas) (fix involved a change in the internal representation of file variables) +-@item 20040331: @samp{'foo'#42} is rejected in @samp{--borland-pascal} (chief53.pas) +-@item 20040330: records/objects with many fields are handled slowly +-@item 20040328: @samp{--implementation-only} doesn't work correctly (bo4-19.pas) +-@item 20040325: messages referring to object methods point to the end of the object type rather than the method declaration +-@item 20040325: bug when slice-accessing a function result of type @samp{Pointer} type-casted to @samp{PString} (bo4-18.pas) +-@item 20040210: incorrect errors with packed arrays and records (fb[12].pas, gale[34].pas) +-@item 20040204: GPC crashes on @samp{else} after a missing semicolon in some circumstances (fjf926.pas) +-@item 20031007: spurious errors about @samp{result types in forward declared functions} in @samp{--extended-pascal} etc. (dave2.pas) +-@item 20031004: do not allow disposing of @samp{nil} pointers in standard Pascal modes (fjf917*.pas) +-@item 20031001: arithmetic expressions don't work as lower array/subrange bounds (fjf204.pas, fjf248.pas, fjf293.pas, fjf336.pas, fjf346a.pas, fjf622.pas) +-@item 20030925: initializers for types containing nested schemata don't work (fjf914*.pas) +-@item 20030830: open internal files with @samp{O_EXCL} on @samp{Rewrite} (as a protection against symlink attacks) +-@item 20030819: GPC accepts, but ignores, options with invalid suffixes (e.g. @samp{--delphi-pascal}) +-@item 20030729: @samp{pow} and @samp{**} are EP conformant now (in particular @samp{x pow y = (1 div x) pow (­y)} if @samp{y} is negative and @samp{x <> 0}) (fjf908.pas) +-@item 20030714: @samp{--enable-keyword}/@samp{--disable-keyword} on the command-line makes GPC crash (david5.pas) +-@item 20030704: wrong type-error when applying @samp{Inc} to a type-casted pointer (peter3.pas) +-@item 20030702: with range checking enabled, check dynamic subrange/array size (fjf222*.pas, fjf813*.pas, fjf900*.pas) +-@item 20030701: GPC allows modification of conformant array bounds, result of @samp{High}/@samp{Low} etc. (fjf897*.pas) +-@item 20030626: don't allow linker names starting with a digit (fjf894.pas) +-@item 20030625: @samp{SubStr} with constant arguments doesn't work in constants (gale1.pas) +-@item 20030617: handle @samp{BitSizeOf} correctly for packed array fields, don't allow @samp{SizeOf} on them (fjf891*.pas) +-@item 20030612: System: @samp{BPReal} must be a packed record <3EE8A26D.C919BE7D@@flexim.de> +-@item 20030610: schema types with initializers (drf1.pas, fjf886*.pas) +-@item 20030610: @samp{Return} doesn't work for sets (fjf885.pas) +-@item 20030609: bug with arrays as fields of @samp{packed} records (waldek6.pas) +-@item 20030607: don't allow duplicate imports in a module interface and implementation (nick1b.pas) +-@item 20030604: compensate for parser read-ahead in the lexer, so compiler directives don't become effective too early and error messages refer more closely to the correct source position +-@item 20030603: bug when dividing two integers with @samp{/} (fjf481.pas) +-@item 20030509: don't allow @samp{absolute} in type definitions +-@item 20030502: subranges with variable limits (couper[23].pas) +-@item 20030502: Sparc with gcc-2.95.x: @samp{goto} jumping out of two procedure nesting levels doesn't work (GCC bug; fixed in gcc-3) <200111170922.KAA09125@@goedel.fjf.gnu.de> (fjf558[op].pas) (fixed with gcc-3 or when using @samp{--longjmp-all-nonlocal-labels}) +-@item 20030502: the parser does not always recover well after a parse error <199911040915.KAA11168@@humulus.daimi.au.dk> (fixed the case given in this report; if there are other cases, please report) +-@item 20030501: detect conflicts between object fields and local variables in methods +-@item 20030430: packed array/record fields don't work in @samp{Read} etc. (tom5.pas) +-@item 20030430: file parameters must not automatically be bindable in @samp{--extended-pascal} (fjf193[c-e].pas) +-@item 20030423: give an error rather than a warning when casting between types of different size in @samp{@{$X-@}} +-@item 20030423: simplify code generated to compute size of dynamical variables if no bitfields are involved (ok with gcc-3) +-@item 20030422: initialized object variables don't work (fjf445*.pas) +-@item 20030422: declarations of a module interface are not visible in the implementation (kevin13.pas, mod12.pas) +-@item 20030422: detect invalid array slice access with constant indices at compile-time (peter2*.pas) +-@item 20030421: automatically close dynamically allocated files on @samp{Dispose} and files declared in a statement block at the end of the statement block <6r9ir5$7v5$1@@nntpd.lkg.dec.com> (fjf219[a-d].pas, fjf502.pas) +-@item 20030421: initialize local static variables in the main constructor, not in each routine call (fjf458*.pas) +-@item 20030421: check parameter and result variable names in repeated forward etc. declarations <20010321204051.A611@@plato> (fjf284.pas, markus8.pas, fjf850*.pas) +-@item 20030417: modifying @samp{for}-loop counters within the loop or in a subroutine is not allowed <200005240807.EAA05355@@mail.bcpl.net>, (az47.pas, fjf837*.pas) +-@item 20030417: possible stack overflow when using string concatenation in a loop (fjf419*.pas, fjf345e.pas, fjf460b.pas) -- breaks berend3.pas (less important because strange test case, and just another instance of existing contourbug.pas) +-@item 20030416: some functions in boolean shortcuts are always called (fjf226*.pas) +-@item 20030414: label declarations must not be allowed in unit/module interfaces and module implementations (but in unit implementations, BP compatible, though we don't allow nonlocal @samp{goto}s into the constructor) (fjf835*.pas) +-@item 20030321: variables declared in interfaces of modules are not initialized (capacity of strings etc.) (daj3.pas, sven14c.pas, nick1.pas) +-@item 20030321: subranges whose size is exactly one or two bytes are not packed in packed arrays (daj14a.pas) +-@item 20030321: @samp{prior parameter's size depends on `Foo'} with @samp{const} string parameters in module interfaces (fjf667.pas) +-@item 20030313: operators don't always work across units (fjf803.pas) +-@item 20030312: overloading @samp{<=}, @samp{>=}, @samp{<>} and some certain words doesn't work (fjf789.pas, fjf794*.pas, fjf800.pas, fjf802.pas, fjf804.pas) +-@item 20030311: when passing a schema variable as an untyped argument, the whole schema, including the discriminants is passed (fjf798.pas) +-@item 20030302: discriminant identifiers as variant record selectors +-@item 20030227: GPC crashes when taking the address of local variables in an initializer (nicola4*.pas) +-@item 20030225: the warnings about uninitialized/unused variables don't work for strings, objects, etc. (fjf779*.pas) +-@item 20030221: gcc-2.95.x: @samp{configure --silent} doesn't work (passes wrong options to sub-configures, so the subsequent make fails) (GCC bug; fixed in 3.x) +-@item 20030215: forward referencing pointers generate debug info that appears as generic pointers +-@item 20030202: count of parameters in error messages should not include @samp{Self} in methods or internal parameters for conformant or open arrays +-@item 20030129: check for unresolved @samp{forward}, interface and method declarations (az32.pas, fjf758*.pas) +-@item 20030129: several standard conformance bugs (az@{1..24,26..42,44..46@}*.pas, emil23*.pas) +-@item 20030126: some bugs with complicated schema usage (emil22*.pas, fjf750*.pas) +-@item 20030122: subtraction of unsigned types with a negative result doesn't work (ml4.pas) +-@item 20021229: declaring huge enum types and exporting subranges of them is very slow (quadratic time behaviour); some bugs regarding exporting of subranges (fjf736*.pas) +-@item 20021213: Linux: @samp{crtscreen} should react to @samp{SIGWINCH} +-@item 20021120: @samp{Card} doesn't work with set constructors; @samp{Include} and @samp{Exclude} should not accept set constructors (eike3*.pas) +-@item 20021105: type initializers are not type-checked until a variable of the type is declared (fjf704.pas); with gcc-2.x: bug when variables of a type with initializer are declared locally in more than one routine (couper13.pas) +-@item 20021105: @samp{packed object} should not be allowed (fjf703.pas) +-@item 20021101: bug when replacing a non-virtual method by a virtual one in a descendant object type (fjf702.pas) +-@item 20021027: classic Pascal does not know the empty string (fjf693*.pas) +-@item 20021027: relational and exponentiation operators have no associativity (fjf692.pas, fjf566[k-m].pas) +-@item 20021002: @samp{gpc -B@var{dir}} requires a trailing dir separator +-@item 20021001: constructors are accepted as the argument to @samp{Dispose} (fjf674.pas) +-@item 20021001: align file fields in packed records on machines with strict alignment requirements (chief38*.pas) +-@item 20021001: bug on machines with strict alignment requirements <199906021618.MAA06228@@sten27.software.mitel.com> (richard1.pas) +-@item 20020930: duplicate variable declarations are allowed +-@item 20020929: @samp{attribute}s of variables are ignored (fjf673.pas) +-@item 20020929: @samp{volatile} for @samp{external} variables without @samp{asmname} is ignored (fjf672.pas) +-@item 20020926: numbers with base specifiers are allowed as labels (fjf417*.pas) +-@item 20020923: System: @samp{MemAvail}/@samp{MaxAvail} can go into an endless loop +-@item 20020920: the number of times the preprocessor is invoked by the automake mechanism might grow exponentially with the number of units involved <02091610572303.14626@@dutw54.wbmt.tudelft.nl> +-@item 20020918: importing @samp{StandardOutput} etc. in the interface of a module doesn't work (sietse2*.pas) +-@item 20020904: comparisons between signed and unsigned integers sometimes give wrong results (eike2.pas, fjf664.pas, martin5.pas) +-@item 20020903: @samp{IOSelect} fails with file handles >= 8 on some systems (e.g., Solaris) (fjf663.pas) +-@item 20020831: GPC creates wrong debug info for many built-in types <200208280012.g7S0CWj07637@@mail.bcpl.net> +-@item 20020827: comparisons of @samp{packed} subrange variables don't work right (martin4[ab].pas) +-@item 20020824: operators defined in units don't always work (maur11.pas) +-@item 20020824: object methods that contain an ISO style procedural parameter forget the implicit @samp{with Self do} (fjf662a.pas) +-@item 20020615: @samp{if Pass[i] in 'A' .. 'Z'} makes GPC crash (miklos6.pas) +-@item 20020603: compiling a program (not a unit or module) with @samp{--interface-only} or @samp{--syntax-only} segfaults (waldek1.pas) +-@item 20020603: @samp{--nested-comments} fails without @samp{-Wall} (waldek2.pas) +-@item 20020514: powerpc: @samp{--strength-reduce} doesn't work with @samp{for} loops [kludged now] +-@item 20020514: guarantee complete evaluation in @samp{@{$B+@}} mode (fjf552*.pas) +-@item 20020514: spurious warning with @samp{for} loops using a @samp{ByteCard} counter (toby1.pas) +-@end itemize +diff -urN gpc-20060325/p/doc/en/welcome.texi gpc-20070904/p/doc/en/welcome.texi +--- gpc-20060325/p/doc/en/welcome.texi 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/doc/en/welcome.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -205,7 +205,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +-the Free Software Foundation; either version 2, or (at your option) ++the Free Software Foundation; either version 3, or (at your option) + any later version. + + GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/doc/generated/crt.texi gpc-20070904/p/doc/generated/crt.texi +--- gpc-20060325/p/doc/generated/crt.texi 2006-02-18 14:37:51.000000000 +0100 ++++ gpc-20070904/p/doc/generated/crt.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -171,7 +171,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/dos.texi gpc-20070904/p/doc/generated/dos.texi +--- gpc-20060325/p/doc/generated/dos.texi 2006-02-18 14:37:51.000000000 +0100 ++++ gpc-20070904/p/doc/generated/dos.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -33,7 +33,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/dosunix.texi gpc-20070904/p/doc/generated/dosunix.texi +--- gpc-20060325/p/doc/generated/dosunix.texi 2006-02-18 14:37:51.000000000 +0100 ++++ gpc-20070904/p/doc/generated/dosunix.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -18,7 +18,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/fileutils.texi gpc-20070904/p/doc/generated/fileutils.texi +--- gpc-20060325/p/doc/generated/fileutils.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/fileutils.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/gmp.texi gpc-20070904/p/doc/generated/gmp.texi +--- gpc-20060325/p/doc/generated/gmp.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/gmp.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -20,7 +20,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/gpc-run.1 gpc-20070904/p/doc/generated/gpc-run.1 +--- gpc-20060325/p/doc/generated/gpc-run.1 2006-03-25 03:25:19.000000000 +0100 ++++ gpc-20070904/p/doc/generated/gpc-run.1 2007-09-04 08:22:54.000000000 +0200 +@@ -1,7 +1,7 @@ + .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.29. +-.TH GPC-RUN "1" "March 2006" "gpc-run 20060325" "User Commands" ++.TH GPC-RUN "1" "September 2007" "gpc-run 20070904" "User Commands" + .SH NAME +-gpc-run \- manual page for gpc-run 20060325 ++gpc-run \- manual page for gpc-run 20070904 + .SH SYNOPSIS + .B gpc-run + [\fIoptions\fR] \fIcommand arguments\fR +diff -urN gpc-20060325/p/doc/generated/gpcpas.texi gpc-20070904/p/doc/generated/gpcpas.texi +--- gpc-20060325/p/doc/generated/gpcpas.texi 2006-03-25 03:25:19.000000000 +0100 ++++ gpc-20070904/p/doc/generated/gpcpas.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -43,7 +43,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -64,7 +64,7 @@ + General Public License. @} + + @{$gnu-pascal,I-@} +-@{$if __GPC_RELEASE__ <> 20060325@} ++@{$if __GPC_RELEASE__ <> 20070904@} + @{$error + Trying to compile gpc.pas with a non-matching GPC version is likely + to cause problems. +@@ -553,32 +553,35 @@ + function LoCaseStr (const s: String) = Result: TString; + attribute (name = '_p_LoCaseStr'); external; + +-function StrEqualCase (const s1, s2: String): Boolean; attribute +- (name = '_p_StrEqualCase'); external; ++function StrEqualCase (const s1: String; const s2: String): ++ Boolean; attribute (name = '_p_StrEqualCase'); external; + +-function Pos (const SubString, s: String): Integer; +- attribute (name = '_p_Pos'); external; ++function Pos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_Pos'); external; + function PosChar (const ch: Char; const s: String): + Integer; attribute (name = '_p_PosChar'); external; +-function LastPos (const SubString, s: String): Integer; +- attribute (name = '_p_LastPos'); external; +-function PosCase (const SubString, s: String): Integer; +- attribute (name = '_p_PosCase'); external; +-function LastPosCase (const SubString, s: String): Integer; +- attribute (name = '_p_LastPosCase'); external; ++function LastPos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPos'); external; ++function PosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_PosCase'); external; ++function LastPosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPosCase'); external; + function CharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_CharPos'); external; + function LastCharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_LastCharPos'); external; + +-function PosFrom (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFrom'); external; +-function LastPosTill (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTill'); external; +-function PosFromCase (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFromCase'); external; +-function LastPosTillCase (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTillCase'); ++function PosFrom (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFrom'); ++ external; ++function LastPosTill (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTill'); ++ external; ++function PosFromCase (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFromCase'); ++ external; ++function LastPosTillCase (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); + external; + function CharPosFrom (const Chars: CharSet; const s: String; + From: Integer): Integer; attribute (name = '_p_CharPosFrom'); +@@ -587,14 +590,14 @@ + Till: Integer): Integer; attribute (name = '_p_LastCharPosTill'); + external; + +-function IsPrefix (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefix'); external; +-function IsSuffix (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffix'); external; +-function IsPrefixCase (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefixCase'); external; +-function IsSuffixCase (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffixCase'); external; ++function IsPrefix (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefix'); external; ++function IsSuffix (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffix'); external; ++function IsPrefixCase (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefixCase'); external; ++function IsSuffixCase (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffixCase'); external; + + function CStringLength (Src: CString): SizeType; attribute + (inline, name = '_p_CStringLength'); external; +@@ -749,8 +752,8 @@ + + @{ Sets an environment variable with the name given in VarName to the + value Value. A previous value, if any, is overwritten. @} +-procedure SetEnv (const VarName, Value: String); attribute (name +- = '_p_SetEnv'); external; ++procedure SetEnv (const VarName: String; const Value: String); ++ attribute (name = '_p_SetEnv'); external; + + @{ Un-sets an environment variable with the name given in VarName. @} + procedure UnSetEnv (const VarName: String); attribute (name +@@ -826,6 +829,10 @@ + RTSErrorFileName: PString; attribute (name = '_p_ErrorFileName'); + external; + ++@{ Finalize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. @} ++procedure GPC_Finalize; ++ attribute (name = '_p_finalize'); external; + function GetErrorMessage (n: Integer): CString; + attribute (name = '_p_GetErrorMessage'); external; + procedure RuntimeError (n: Integer); attribute +@@ -1521,17 +1528,17 @@ + otherwise returns an empty string. If aFileName already contains + an element of DirSeparators, returns Slash2OSDirSeparator + (aFileName) if it exists. @} +-function FSearch (const aFileName, DirList: String): TString; +- attribute (name = '_p_FSearch'); external; ++function FSearch (const aFileName: String; const DirList: String): ++ TString; attribute (name = '_p_FSearch'); external; + + @{ Like FSearch, but only find executable files. Under Dos, if not + found, the function tries appending '.com', '.exe', '.bat' and + @samp{.cmd} (the last one only if $COMSPEC points to a @samp{cmd.exe}), so + you don't have to specify these extensions in aFileName (and with + respect to portability, it might be preferable not to do so). @} +-function FSearchExecutable (const aFileName, DirList: String) = +- Result: TString; attribute (name = '_p_FSearchExecutable'); +- external; ++function FSearchExecutable (const aFileName: String; const DirList: ++ String) = Result: TString; attribute (name ++ = '_p_FSearchExecutable'); external; + + @{ Replaces all occurrences of @samp{$FOO} and @samp{~} in s by the value of + the environment variables FOO or HOME, respectively. If a variable +@@ -1575,8 +1582,9 @@ + + @{ Splits a file name into directory, name and extension. Each of + Dir, BaseName and Ext may be Null. @} +-procedure FSplit (const Path: String; var Dir, BaseName, Ext: +- String); attribute (name = '_p_FSplit'); external; ++procedure FSplit (const Path: String; var Dir: String; var BaseName: ++ String; var Ext: String); attribute (name = '_p_FSplit'); ++ external; + + @{ Functions that extract one or two of the parts from FSplit. + DirFromPath returns DirSelf + DirSeparator if the path contains no +@@ -1614,9 +1622,9 @@ + + @{ Returns the first occurence of SubString in s that is not quoted + at the beginning, or 0 if no such occurence exists. @} +-function FindNonQuotedStr (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); +- external; ++function FindNonQuotedStr (const SubString: String; const s: ++ String; From: Integer): Integer; attribute (name ++ = '_p_FindNonQuotedStr'); external; + + @{ Does a string contain non-quoted wildcard characters? @} + function HasWildCards (const s: String): Boolean; attribute (name +@@ -1650,12 +1658,13 @@ + = '_p_DisposePPStrings'); external; + + @{ Tests if a file name matches a shell wildcard pattern (?, *, []) @} +-function FileNameMatch (const Pattern, FileName: String): Boolean; +- attribute (name = '_p_FileNameMatch'); external; ++function FileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_FileNameMatch'); external; + + @{ FileNameMatch with BraceExpand @} +-function MultiFileNameMatch (const Pattern, FileName: String): +- Boolean; attribute (name = '_p_MultiFileNameMatch'); external; ++function MultiFileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_MultiFileNameMatch'); ++ external; + + @{ File name globbing @} + @{ GlobInit is implied by Glob and MultiGlob, not by GlobOn and +@@ -1791,9 +1800,9 @@ + HOME is not. However, it is easy for users to set it if they want + their config files in a certain directory rather than with the + executables. @} +-function ConfigFileName (const Prefix, BaseName: String; Global: +- Boolean): TString; attribute (name = '_p_ConfigFileName'); +- external; ++function ConfigFileName (const Prefix: String; const BaseName: ++ String; Global: Boolean): TString; attribute (name ++ = '_p_ConfigFileName'); external; + + @{ Returns a directory name suitable for global, machine-independent + data. The function garantees that the name returned ends with a +@@ -1814,8 +1823,9 @@ + + About the symbols used above, and the two possibilities under Dos, + see the comments for ConfigFileName. @} +-function DataDirectoryName (const Prefix, BaseName: String): +- TString; attribute (name = '_p_DataDirectoryName'); external; ++function DataDirectoryName (const Prefix: String; const BaseName: ++ String): TString; attribute (name = '_p_DataDirectoryName'); ++ external; + + @{ Executes a command line. Reports execution errors via the IOResult + mechanism and returns the exit status of the executed program. +@@ -2368,6 +2378,17 @@ + + @{ Initialization, from init.pas @} + ++@{ Initialize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. ++ ArgumentCount, Arguments are argc and argv in C; StartEnvironment ++ is the environment variable pointer, and can be nil if other ways ++ to obtain the environment are available. Options can be 0 or a ++ combination of ro_* flags as defined in rts/constants.def. @} ++procedure GPC_Initialize (ArgumentCount: CInteger; ++ Arguments, StartEnvironment: PCStrings; ++ Options: CInteger); ++ attribute (name = '_p_initialize'); external; ++ + var + InitProc: ^procedure; attribute (name = '_p_InitProc'); external; + +diff -urN gpc-20060325/p/doc/generated/gpcutil.texi gpc-20070904/p/doc/generated/gpcutil.texi +--- gpc-20060325/p/doc/generated/gpcutil.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/gpcutil.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -17,7 +17,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/heapmon.texi gpc-20070904/p/doc/generated/heapmon.texi +--- gpc-20060325/p/doc/generated/heapmon.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/heapmon.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -26,7 +26,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/intl.texi gpc-20070904/p/doc/generated/intl.texi +--- gpc-20060325/p/doc/generated/intl.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/intl.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -42,7 +42,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/doc/generated/keyword.texi gpc-20070904/p/doc/generated/keyword.texi +--- gpc-20060325/p/doc/generated/keyword.texi 2006-02-18 14:37:49.000000000 +0100 ++++ gpc-20070904/p/doc/generated/keyword.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -23,7 +23,7 @@ + @item as (OP, BD, MP) (@pxref{as}) + @cindex as + object type membership test and conversion +-@item asm (BP, BD) (@pxref{asm}) ++@item asm (BP, BD, MP) (@pxref{asm}) + @cindex asm + GNU style inline assembler code + @item asmname (GPC) (@pxref{asmname}) +diff -urN gpc-20060325/p/doc/generated/md5.texi gpc-20070904/p/doc/generated/md5.texi +--- gpc-20060325/p/doc/generated/md5.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/md5.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -16,7 +16,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/doc/generated/overlay.texi gpc-20070904/p/doc/generated/overlay.texi +--- gpc-20060325/p/doc/generated/overlay.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/overlay.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/pipes.texi gpc-20070904/p/doc/generated/pipes.texi +--- gpc-20060325/p/doc/generated/pipes.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/pipes.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/ports.texi gpc-20070904/p/doc/generated/ports.texi +--- gpc-20060325/p/doc/generated/ports.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/ports.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -15,7 +15,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/printer.texi gpc-20070904/p/doc/generated/printer.texi +--- gpc-20060325/p/doc/generated/printer.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/printer.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/regex.texi gpc-20070904/p/doc/generated/regex.texi +--- gpc-20060325/p/doc/generated/regex.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/regex.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -102,7 +102,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/strings.texi gpc-20070904/p/doc/generated/strings.texi +--- gpc-20060325/p/doc/generated/strings.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/strings.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/stringutils.texi gpc-20070904/p/doc/generated/stringutils.texi +--- gpc-20060325/p/doc/generated/stringutils.texi 2006-02-18 14:37:52.000000000 +0100 ++++ gpc-20070904/p/doc/generated/stringutils.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/system.texi gpc-20070904/p/doc/generated/system.texi +--- gpc-20060325/p/doc/generated/system.texi 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/doc/generated/system.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -62,7 +62,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/tfdd.texi gpc-20070904/p/doc/generated/tfdd.texi +--- gpc-20060325/p/doc/generated/tfdd.texi 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/doc/generated/tfdd.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/trap.texi gpc-20070904/p/doc/generated/trap.texi +--- gpc-20060325/p/doc/generated/trap.texi 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/doc/generated/trap.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -52,7 +52,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/turbo3.texi gpc-20070904/p/doc/generated/turbo3.texi +--- gpc-20060325/p/doc/generated/turbo3.texi 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/doc/generated/turbo3.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/generated/version.texi gpc-20070904/p/doc/generated/version.texi +--- gpc-20060325/p/doc/generated/version.texi 2006-03-25 03:25:18.000000000 +0100 ++++ gpc-20070904/p/doc/generated/version.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -3,5 +3,5 @@ + + @set GPCMajor 2 + @set GPCMinor 1 +-@set GPCVersion 20060325 ++@set GPCVersion 20070904 + @set GCCVersion 2.8.1, 2.95.x, 3.2.x, 3.3.x or 3.4.x +diff -urN gpc-20060325/p/doc/generated/windos.texi gpc-20070904/p/doc/generated/windos.texi +--- gpc-20060325/p/doc/generated/windos.texi 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/doc/generated/windos.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -32,7 +32,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/doc/hr/welcome.texi gpc-20070904/p/doc/hr/welcome.texi +--- gpc-20060325/p/doc/hr/welcome.texi 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/doc/hr/welcome.texi 2007-09-04 08:22:54.000000000 +0200 +@@ -221,7 +221,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +-the Free Software Foundation; either version 2, or (at your option) ++the Free Software Foundation; either version 3, or (at your option) + any later version. + + GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/doc/images/gradient.eps gpc-20070904/p/doc/images/gradient.eps +--- gpc-20060325/p/doc/images/gradient.eps 2005-01-01 23:45:35.000000000 +0100 ++++ gpc-20070904/p/doc/images/gradient.eps 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + % + % This program is free software; you can redistribute it and/or + % modify it under the terms of the GNU General Public License as +-% published by the Free Software Foundation, version 2. ++% published by the Free Software Foundation, version 3. + % + % This program is distributed in the hope that it will be useful, + % but WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/doc/info/gpc-es.info gpc-20070904/p/doc/info/gpc-es.info +--- gpc-20060325/p/doc/info/gpc-es.info 2006-03-25 03:25:22.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpc-es.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-This is ../../gcc-4.0.2/gcc/p/doc/info/gpc-es.info, produced by ++This is ../../gcc-3.4.6/gcc/p/doc/info/gpc-es.info, produced by + makeinfo version 4.7 from gpc.texi. + + INFO-DIR-SECTION GNU programming tools +@@ -42,7 +42,7 @@ + + This manual documents how to run, install and maintain the GNU Pascal + Compiler (GPC), as well as its new features and incompatibilities, and +-how to report bugs. It corresponds to GPC 20060325 (GCC 2.8.1, 2.95.x, ++how to report bugs. It corresponds to GPC 20070904 (GCC 2.8.1, 2.95.x, + 3.2.x, 3.3.x or 3.4.x). + + * Menu: +@@ -556,6 +556,19 @@ + to minor problems with old code, but we suppose they're rare and easy + to overcome. Backward-incompatible changes are marked with `(@)'. + ++ * support building libgpc as Mach shared library ++ ++ * `GPC_Initialize' and `GPC_Finalize' available as user routines (to ++ help building shared libraries) ++ ++ * better warnings for unexpected results of string comparisons ++ ++ * handle `volatile' attribute on types ++ ++ * allow `asm' in any dialect (if the `asm' keyword is enabled) ++ ++ * support for gcc-4.1.x ++ + * preliminary support for gcc-4.0.x + + * handle named exit from a method +@@ -1069,7 +1082,7 @@ + 3.1.2 What is the current version? + ---------------------------------- + +-The current version is 20060325. ++The current version is 20070904. + + Releases are available as a source archive and precompiled binaries + for several common platforms from the GPC web site, +@@ -7684,7 +7697,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -7705,7 +7718,7 @@ + General Public License. } + + {$gnu-pascal,I-} +- {$if __GPC_RELEASE__ <> 20060325} ++ {$if __GPC_RELEASE__ <> 20070904} + {$error + Trying to compile gpc.pas with a non-matching GPC version is likely + to cause problems. +@@ -8194,32 +8207,35 @@ + function LoCaseStr (const s: String) = Result: TString; + attribute (name = '_p_LoCaseStr'); external; + +- function StrEqualCase (const s1, s2: String): Boolean; attribute +- (name = '_p_StrEqualCase'); external; ++ function StrEqualCase (const s1: String; const s2: String): ++ Boolean; attribute (name = '_p_StrEqualCase'); external; + +- function Pos (const SubString, s: String): Integer; +- attribute (name = '_p_Pos'); external; ++ function Pos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_Pos'); external; + function PosChar (const ch: Char; const s: String): + Integer; attribute (name = '_p_PosChar'); external; +- function LastPos (const SubString, s: String): Integer; +- attribute (name = '_p_LastPos'); external; +- function PosCase (const SubString, s: String): Integer; +- attribute (name = '_p_PosCase'); external; +- function LastPosCase (const SubString, s: String): Integer; +- attribute (name = '_p_LastPosCase'); external; ++ function LastPos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPos'); external; ++ function PosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_PosCase'); external; ++ function LastPosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPosCase'); external; + function CharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_CharPos'); external; + function LastCharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_LastCharPos'); external; + +- function PosFrom (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFrom'); external; +- function LastPosTill (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTill'); external; +- function PosFromCase (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFromCase'); external; +- function LastPosTillCase (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTillCase'); ++ function PosFrom (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFrom'); ++ external; ++ function LastPosTill (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTill'); ++ external; ++ function PosFromCase (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFromCase'); ++ external; ++ function LastPosTillCase (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); + external; + function CharPosFrom (const Chars: CharSet; const s: String; + From: Integer): Integer; attribute (name = '_p_CharPosFrom'); +@@ -8228,14 +8244,14 @@ + Till: Integer): Integer; attribute (name = '_p_LastCharPosTill'); + external; + +- function IsPrefix (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefix'); external; +- function IsSuffix (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffix'); external; +- function IsPrefixCase (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefixCase'); external; +- function IsSuffixCase (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffixCase'); external; ++ function IsPrefix (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefix'); external; ++ function IsSuffix (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffix'); external; ++ function IsPrefixCase (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefixCase'); external; ++ function IsSuffixCase (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffixCase'); external; + + function CStringLength (Src: CString): SizeType; attribute + (inline, name = '_p_CStringLength'); external; +@@ -8390,8 +8406,8 @@ + + { Sets an environment variable with the name given in VarName to the + value Value. A previous value, if any, is overwritten. } +- procedure SetEnv (const VarName, Value: String); attribute (name +- = '_p_SetEnv'); external; ++ procedure SetEnv (const VarName: String; const Value: String); ++ attribute (name = '_p_SetEnv'); external; + + { Un-sets an environment variable with the name given in VarName. } + procedure UnSetEnv (const VarName: String); attribute (name +@@ -8467,6 +8483,10 @@ + RTSErrorFileName: PString; attribute (name = '_p_ErrorFileName'); + external; + ++ { Finalize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. } ++ procedure GPC_Finalize; ++ attribute (name = '_p_finalize'); external; + function GetErrorMessage (n: Integer): CString; + attribute (name = '_p_GetErrorMessage'); external; + procedure RuntimeError (n: Integer); attribute +@@ -9162,17 +9182,17 @@ + otherwise returns an empty string. If aFileName already contains + an element of DirSeparators, returns Slash2OSDirSeparator + (aFileName) if it exists. } +- function FSearch (const aFileName, DirList: String): TString; +- attribute (name = '_p_FSearch'); external; ++ function FSearch (const aFileName: String; const DirList: String): ++ TString; attribute (name = '_p_FSearch'); external; + + { Like FSearch, but only find executable files. Under Dos, if not + found, the function tries appending '.com', '.exe', '.bat' and + `.cmd' (the last one only if $COMSPEC points to a `cmd.exe'), so + you don't have to specify these extensions in aFileName (and with + respect to portability, it might be preferable not to do so). } +- function FSearchExecutable (const aFileName, DirList: String) = +- Result: TString; attribute (name = '_p_FSearchExecutable'); +- external; ++ function FSearchExecutable (const aFileName: String; const DirList: ++ String) = Result: TString; attribute (name ++ = '_p_FSearchExecutable'); external; + + { Replaces all occurrences of `$FOO' and `~' in s by the value of + the environment variables FOO or HOME, respectively. If a variable +@@ -9216,8 +9236,9 @@ + + { Splits a file name into directory, name and extension. Each of + Dir, BaseName and Ext may be Null. } +- procedure FSplit (const Path: String; var Dir, BaseName, Ext: +- String); attribute (name = '_p_FSplit'); external; ++ procedure FSplit (const Path: String; var Dir: String; var BaseName: ++ String; var Ext: String); attribute (name = '_p_FSplit'); ++ external; + + { Functions that extract one or two of the parts from FSplit. + DirFromPath returns DirSelf + DirSeparator if the path contains no +@@ -9255,9 +9276,9 @@ + + { Returns the first occurence of SubString in s that is not quoted + at the beginning, or 0 if no such occurence exists. } +- function FindNonQuotedStr (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); +- external; ++ function FindNonQuotedStr (const SubString: String; const s: ++ String; From: Integer): Integer; attribute (name ++ = '_p_FindNonQuotedStr'); external; + + { Does a string contain non-quoted wildcard characters? } + function HasWildCards (const s: String): Boolean; attribute (name +@@ -9291,12 +9312,13 @@ + = '_p_DisposePPStrings'); external; + + { Tests if a file name matches a shell wildcard pattern (?, *, []) } +- function FileNameMatch (const Pattern, FileName: String): Boolean; +- attribute (name = '_p_FileNameMatch'); external; ++ function FileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_FileNameMatch'); external; + + { FileNameMatch with BraceExpand } +- function MultiFileNameMatch (const Pattern, FileName: String): +- Boolean; attribute (name = '_p_MultiFileNameMatch'); external; ++ function MultiFileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_MultiFileNameMatch'); ++ external; + + { File name globbing } + { GlobInit is implied by Glob and MultiGlob, not by GlobOn and +@@ -9432,9 +9454,9 @@ + HOME is not. However, it is easy for users to set it if they want + their config files in a certain directory rather than with the + executables. } +- function ConfigFileName (const Prefix, BaseName: String; Global: +- Boolean): TString; attribute (name = '_p_ConfigFileName'); +- external; ++ function ConfigFileName (const Prefix: String; const BaseName: ++ String; Global: Boolean): TString; attribute (name ++ = '_p_ConfigFileName'); external; + + { Returns a directory name suitable for global, machine-independent + data. The function garantees that the name returned ends with a +@@ -9455,8 +9477,9 @@ + + About the symbols used above, and the two possibilities under Dos, + see the comments for ConfigFileName. } +- function DataDirectoryName (const Prefix, BaseName: String): +- TString; attribute (name = '_p_DataDirectoryName'); external; ++ function DataDirectoryName (const Prefix: String; const BaseName: ++ String): TString; attribute (name = '_p_DataDirectoryName'); ++ external; + + { Executes a command line. Reports execution errors via the IOResult + mechanism and returns the exit status of the executed program. +@@ -10009,6 +10032,17 @@ + + { Initialization, from init.pas } + ++ { Initialize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. ++ ArgumentCount, Arguments are argc and argv in C; StartEnvironment ++ is the environment variable pointer, and can be nil if other ways ++ to obtain the environment are available. Options can be 0 or a ++ combination of ro_* flags as defined in rts/constants.def. } ++ procedure GPC_Initialize (ArgumentCount: CInteger; ++ Arguments, StartEnvironment: PCStrings; ++ Options: CInteger); ++ attribute (name = '_p_initialize'); external; ++ + var + InitProc: ^procedure; attribute (name = '_p_InitProc'); external; + +@@ -10259,7 +10293,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -10981,7 +11015,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11191,7 +11225,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11292,7 +11326,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11433,7 +11467,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12071,7 +12105,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12300,7 +12334,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12400,7 +12434,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -12599,7 +12633,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -12677,7 +12711,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12758,7 +12792,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12983,7 +13017,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13066,7 +13100,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13255,7 +13289,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13421,7 +13455,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13496,7 +13530,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13847,7 +13881,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14151,7 +14185,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14249,7 +14283,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14312,7 +14346,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14411,7 +14445,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -16370,6 +16404,7 @@ + * Read:: + * ReadLn:: + * ReadStr:: ++* ReadString:: + * Real:: + * record:: + * Release:: +@@ -16418,6 +16453,7 @@ + * Str:: + * String:: + * String2CString:: ++* StringOf:: + * SubStr:: + * Succ:: + * Text:: +@@ -25244,9 +25280,12 @@ + object type and can be accessed via `TypeOf'. + + `Size' contains the size of the object type, `NegatedSize' contains +-the size negated (for runtime checks). `Parent' contains a pointer to +-the parent type's VMT (or nil if the type has no parent). `Name' points +-to a string containing the type's name. ++the size negated (for optional runtime checks). `Parent' contains a ++pointer to the parent type's VMT (or nil if the type has no parent). ++`Name' points to a string containing the type's name. ++ ++ For abstract object types, `Size' contains 0 and `NegatedSize' ++contains -1, so they will always fail the runtime check. + + Conforming to + ------------- +@@ -26100,7 +26139,7 @@ + -------- + +  +-File: gpc-es.info, Node: ReadStr, Next: Real, Prev: ReadLn, Up: Reference ++File: gpc-es.info, Node: ReadStr, Next: ReadString, Prev: ReadLn, Up: Reference + + ReadStr + ======= +@@ -26127,7 +26166,28 @@ + -------- + +  +-File: gpc-es.info, Node: Real, Next: record, Prev: ReadStr, Up: Reference ++File: gpc-es.info, Node: ReadString, Next: Real, Prev: ReadStr, Up: Reference ++ ++ReadString ++========== ++ ++Description ++----------- ++ ++`ReadString' is an alternative name for `ReadStr' ++ ++Conforming to ++------------- ++ ++`ReadString' is a Mac Pascal extension. ++ ++See also ++-------- ++ ++*Note ReadStr:: ++ ++ ++File: gpc-es.info, Node: Real, Next: record, Prev: ReadString, Up: Reference + + Real + ==== +@@ -28039,7 +28099,7 @@ + -------- + +  +-File: gpc-es.info, Node: String2CString, Next: SubStr, Prev: String, Up: Reference ++File: gpc-es.info, Node: String2CString, Next: StringOf, Prev: String, Up: Reference + + String2CString + ============== +@@ -28066,7 +28126,43 @@ + -------- + +  +-File: gpc-es.info, Node: SubStr, Next: Succ, Prev: String2CString, Up: Reference ++File: gpc-es.info, Node: StringOf, Next: SubStr, Prev: String2CString, Up: Reference ++ ++StringOf ++======== ++ ++Synopsis ++-------- ++ ++ function StringOf (VALUES_AND_FORMAT_SPECIFICATIONS): String; ++ ++Description ++----------- ++ ++`StringOf' prints its arguments to an internal buffer and returns ++resulting string. Value and format specifications are handled exactly ++the same as in `Write' or `WriteStr'. ++ ++Conforming to ++------------- ++ ++`StringOf' is a Mac Pascal extension. ++ ++Example ++------- ++ ++ program StringOfDemo; ++ begin ++ writeln(StringOf('2 * 2 = ', 2 * 2)) ++ end. ++ ++See also ++-------- ++ ++*Note Write:: *Note WriteStr::. ++ ++ ++File: gpc-es.info, Node: SubStr, Next: Succ, Prev: StringOf, Up: Reference + + SubStr + ====== +@@ -29748,7 +29844,7 @@ + as (OP, BD, MP) (*note as::) + object type membership test and conversion + +-asm (BP, BD) (*note asm::) ++asm (BP, BD, MP) (*note asm::) + GNU style inline assembler code + + asmname (GPC) (*note asmname::) +@@ -30523,7 +30619,7 @@ + list can be found at `http://www.gnu-pascal.de/crystal/gpc/en/'. + + The list changes regularly. The present version refers to the +-current GPC snapshot, 20060325. ++current GPC snapshot, 20070904. + + This list is part of the GNU Pascal Manual, included in GPC + distributions and snapshots. You can always browse the most current +@@ -30824,6 +30920,39 @@ + you can check if some problem has already been solved in a recent + release or developer version. For new features, see *Note News::. + ++ * 20070903: Prevent multiple evaluation of some string expressions ++ (roland2.pas). ++ ++ * 20070903: Correct range checking for `Succ' and `Pred' applied to ++ enumerations (`fsc2[24].pas') on 64-bit machines. ++ ++ * 20070903: Check that procedures assigned to constant variables are ++ not nested (did not work with 4.x backends) (nicola4c.pas). ++ ++ * 20070903: On 64-bit machines range check for small unsigned ++ subranges failed to work (range2.pas and chuck6.pas). ++ ++ * 20070902: Allow copy on function values (copy1.pas). ++ ++ * 20070831: Do not ICE on break outside loop (affected 4.x backends) ++ (russ5[ab].pas). ++ ++ * 20070830: Fix crash for some initializers (affected 4.x backends) ++ (igor2.pas). ++ ++ * 20060830: Allow jumps into blocks when `-no-iso-goto-restrictions' ++ is in force (goto9[cd].pas). ++ ++ * 20060722: Some initializers with nested strings were rejected ++ (velo1.pas). ++ ++ * 20060519: Correct some build problems. ++ ++ * 20060505: Local `R-' option affected rest of the file ++ (gale12[a-h].pas). ++ ++ * 20060424: Handle empty string in InternalStringOf (stro2.pas). ++ + * 20060304: Do not allow passing strings to parameters of type array + of char subrange (avoids passing out of range values). + +@@ -32698,295 +32827,666 @@ + Appendix A GNU GENERAL PUBLIC LICENSE + ************************************* + +- Version 2, June 1991 ++ Version 3, 29 June 2007 + +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. ++ Everyone is permitted to copy and distribute verbatim copies of this ++ license document, but changing it is not allowed. + +-GPL Preamble +-============ ++Preamble ++======== + +-The licenses for most software are designed to take away your freedom +-to share and change it. By contrast, the GNU General Public License is +-intended to guarantee your freedom to share and change free software - +-to make sure the software is free for all its users. This General +-Public License applies to most of the Free Software Foundation's +-software and to any other program whose authors commit to using it. +-(Some other Free Software Foundation software is covered by the GNU +-Lesser General Public License instead.) You can apply it to your +-programs, too. ++The GNU General Public License is a free, copyleft license for software ++and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains ++free software for all its users. We, the Free Software Foundation, use ++the GNU General Public License for most of our software; it applies ++also to any other work released this way by its authors. You can apply ++it to your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it in +-new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you ++have certain responsibilities if you distribute copies of the software, ++or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, +-and (2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, receive ++or can get the source code. And you must show them these terms so they ++know their rights. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the ++manufacturer can do so. This is fundamentally incompatible with the ++aim of protecting users' freedom to change the software. The ++systematic pattern of such abuse occurs in the area of products for ++individuals to use, which is precisely where it is most unacceptable. ++Therefore, we have designed this version of the GPL to prohibit the ++practice for those products. If such problems arise substantially in ++other domains, we stand ready to extend this provision to those domains ++in future versions of the GPL, as needed to protect the freedom of ++users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- 0. This License applies to any program or other work which contains a +- notice placed by the copyright holder saying it may be distributed +- under the terms of this General Public License. The "Program", +- below, refers to any such program or work, and a "work based on +- the Program" means either the Program or any derivative work under +- copyright law: that is to say, a work containing the Program or a +- portion of it, either verbatim or with modifications and/or +- translated into another language. (Hereinafter, translation is +- included without limitation in the term "modification".) Each +- licensee is addressed as "you". +- +- Activities other than copying, distribution and modification are +- not covered by this License; they are outside its scope. The act +- of running the Program is not restricted, and the output from the +- Program is covered only if its contents constitute a work based on +- the Program (independent of having been made by running the +- Program). Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +- source code as you receive it, in any medium, provided that you +- conspicuously and appropriately publish on each copy an appropriate +- copyright notice and disclaimer of warranty; keep intact all the +- notices that refer to this License and to the absence of any +- warranty; and give any other recipients of the Program a copy of +- this License along with the Program. +- +- You may charge a fee for the physical act of transferring a copy, +- and you may at your option offer warranty protection in exchange +- for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +- of it, thus forming a work based on the Program, and copy and +- distribute such modifications or work under the terms of Section 1 +- above, provided that you also meet all of these conditions: +- +- a. You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b. You must cause any work that you distribute or publish, that +- in whole or in part contains or is derived from the Program +- or any part thereof, to be licensed as a whole at no charge +- to all third parties under the terms of this License. +- +- c. If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display +- an announcement including an appropriate copyright notice and +- a notice that there is no warranty (or else, saying that you +- provide a warranty) and that users may redistribute the +- program under these conditions, and telling the user how to +- view a copy of this License. (Exception: if the Program +- itself is interactive but does not normally print such an +- announcement, your work based on the Program is not required +- to print an announcement.) +- +- These requirements apply to the modified work as a whole. If +- identifiable sections of that work are not derived from the +- Program, and can be reasonably considered independent and separate +- works in themselves, then this License, and its terms, do not +- apply to those sections when you distribute them as separate +- works. But when you distribute the same sections as part of a +- whole which is a work based on the Program, the distribution of +- the whole must be on the terms of this License, whose permissions +- for other licensees extend to the entire whole, and thus to each +- and every part regardless of who wrote it. +- +- Thus, it is not the intent of this section to claim rights or +- contest your rights to work written entirely by you; rather, the +- intent is to exercise the right to control the distribution of +- derivative or collective works based on the Program. ++TERMS AND CONDITIONS ++==================== + +- In addition, mere aggregation of another work not based on the +- Program with the Program (or with a work based on the Program) on +- a volume of a storage or distribution medium does not bring the +- other work under the scope of this License. ++ 0. Definitions. + +- 3. You may copy and distribute the Program (or a work based on it, +- under Section 2) in object code or executable form under the terms +- of Sections 1 and 2 above provided that you also do one of the +- following: +- +- a. Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of +- Sections 1 and 2 above on a medium customarily used for +- software interchange; or, +- +- b. Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a +- medium customarily used for software interchange; or, +- +- c. Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with +- such an offer, in accord with Subsection b above.) +- +- The source code for a work means the preferred form of the work for +- making modifications to it. For an executable work, complete +- source code means all the source code for all modules it contains, +- plus any associated interface definition files, plus the scripts +- used to control compilation and installation of the executable. +- However, as a special exception, the source code distributed need +- not include anything that is normally distributed (in either +- source or binary form) with the major components (compiler, +- kernel, and so on) of the operating system on which the executable +- runs, unless that component itself accompanies the executable. +- +- If distribution of executable or object code is made by offering +- access to copy from a designated place, then offering equivalent +- access to copy the source code from the same place counts as +- distribution of the source code, even though third parties are not +- compelled to copy the source along with the object code. ++ "This License" refers to version 3 of the GNU General Public ++ License. + +- 4. You may not copy, modify, sublicense, or distribute the Program +- except as expressly provided under this License. Any attempt +- otherwise to copy, modify, sublicense or distribute the Program is +- void, and will automatically terminate your rights under this +- License. However, parties who have received copies, or rights, +- from you under this License will not have their licenses +- terminated so long as such parties remain in full compliance. ++ "Copyright" also means copyright-like laws that apply to other ++ kinds of works, such as semiconductor masks. + +- 5. You are not required to accept this License, since you have not +- signed it. However, nothing else grants you permission to modify +- or distribute the Program or its derivative works. These actions +- are prohibited by law if you do not accept this License. +- Therefore, by modifying or distributing the Program (or any work +- based on the Program), you indicate your acceptance of this +- License to do so, and all its terms and conditions for copying, +- distributing or modifying the Program or works based on it. ++ "The Program" refers to any copyrightable work licensed under this ++ License. Each licensee is addressed as "you". "Licensees" and ++ "recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the ++ work in a fashion requiring copyright permission, other than the ++ making of an exact copy. The resulting work is called a "modified ++ version" of the earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work ++ based on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++ permission, would make you directly or secondarily liable for ++ infringement under applicable copyright law, except executing it ++ on a computer or modifying a private copy. Propagation includes ++ copying, distribution (with or without modification), making ++ available to the public, and in some countries other activities as ++ well. ++ ++ To "convey" a work means any kind of propagation that enables other ++ parties to make or receive copies. Mere interaction with a user ++ through a computer network, with no transfer of a copy, is not ++ conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++ to the extent that it includes a convenient and prominently visible ++ feature that (1) displays an appropriate copyright notice, and (2) ++ tells the user that there is no warranty for the work (except to ++ the extent that warranties are provided), that licensees may ++ convey the work under this License, and how to view a copy of this ++ License. If the interface presents a list of user commands or ++ options, such as a menu, a prominent item in the list meets this ++ criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++ for making modifications to it. "Object code" means any ++ non-source form of a work. ++ ++ A "Standard Interface" means an interface that either is an ++ official standard defined by a recognized standards body, or, in ++ the case of interfaces specified for a particular programming ++ language, one that is widely used among developers working in that ++ language. ++ ++ The "System Libraries" of an executable work include anything, ++ other than the work as a whole, that (a) is included in the normal ++ form of packaging a Major Component, but which is not part of that ++ Major Component, and (b) serves only to enable use of the work ++ with that Major Component, or to implement a Standard Interface ++ for which an implementation is available to the public in source ++ code form. A "Major Component", in this context, means a major ++ essential component (kernel, window system, and so on) of the ++ specific operating system (if any) on which the executable work ++ runs, or a compiler used to produce the work, or an object code ++ interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++ the source code needed to generate, install, and (for an executable ++ work) run the object code and to modify the work, including ++ scripts to control those activities. However, it does not include ++ the work's System Libraries, or general-purpose tools or generally ++ available free programs which are used unmodified in performing ++ those activities but which are not part of the work. For example, ++ Corresponding Source includes interface definition files ++ associated with source files for the work, and the source code for ++ shared libraries and dynamically linked subprograms that the work ++ is specifically designed to require, such as by intimate data ++ communication or control flow between those subprograms and other ++ parts of the work. ++ ++ The Corresponding Source need not include anything that users can ++ regenerate automatically from other parts of the Corresponding ++ Source. ++ ++ The Corresponding Source for a work in source code form is that ++ same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++ copyright on the Program, and are irrevocable provided the stated ++ conditions are met. This License explicitly affirms your unlimited ++ permission to run the unmodified Program. The output from running ++ a covered work is covered by this License only if the output, ++ given its content, constitutes a covered work. This License ++ acknowledges your rights of fair use or other equivalent, as ++ provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++ convey, without conditions so long as your license otherwise ++ remains in force. You may convey covered works to others for the ++ sole purpose of having them make modifications exclusively for ++ you, or provide you with facilities for running those works, ++ provided that you comply with the terms of this License in ++ conveying all material for which you do not control copyright. ++ Those thus making or running the covered works for you must do so ++ exclusively on your behalf, under your direction and control, on ++ terms that prohibit them from making any copies of your ++ copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++ the conditions stated below. Sublicensing is not allowed; section ++ 10 makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++ measure under any applicable law fulfilling obligations under ++ article 11 of the WIPO copyright treaty adopted on 20 December ++ 1996, or similar laws prohibiting or restricting circumvention of ++ such measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++ circumvention of technological measures to the extent such ++ circumvention is effected by exercising rights under this License ++ with respect to the covered work, and you disclaim any intention ++ to limit operation or modification of the work as a means of ++ enforcing, against the work's users, your or third parties' legal ++ rights to forbid circumvention of technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey verbatim copies of the Program's source code as you ++ receive it, in any medium, provided that you conspicuously and ++ appropriately publish on each copy an appropriate copyright notice; ++ keep intact all notices stating that this License and any ++ non-permissive terms added in accord with section 7 apply to the ++ code; keep intact all notices of the absence of any warranty; and ++ give all recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++ and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++ produce it from the Program, in the form of source code under the ++ terms of section 4, provided that you also meet all of these ++ conditions: ++ ++ a. The work must carry prominent notices stating that you ++ modified it, and giving a relevant date. ++ ++ b. The work must carry prominent notices stating that it is ++ released under this License and any conditions added under ++ section 7. This requirement modifies the requirement in ++ section 4 to "keep intact all notices". ++ ++ c. You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable ++ section 7 additional terms, to the whole of the work, and all ++ its parts, regardless of how they are packaged. This License ++ gives no permission to license the work in any other way, but ++ it does not invalidate such permission if you have separately ++ received it. ++ ++ d. If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has ++ interactive interfaces that do not display Appropriate Legal ++ Notices, your work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++ works, which are not by their nature extensions of the covered ++ work, and which are not combined with it such as to form a larger ++ program, in or on a volume of a storage or distribution medium, is ++ called an "aggregate" if the compilation and its resulting ++ copyright are not used to limit the access or legal rights of the ++ compilation's users beyond what the individual works permit. ++ Inclusion of a covered work in an aggregate does not cause this ++ License to apply to the other parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++ of sections 4 and 5, provided that you also convey the ++ machine-readable Corresponding Source under the terms of this ++ License, in one of these ways: ++ ++ a. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for ++ as long as you offer spare parts or customer support for that ++ product model, to give anyone who possesses the object code ++ either (1) a copy of the Corresponding Source for all the ++ software in the product that is covered by this License, on a ++ durable physical medium customarily used for software ++ interchange, for a price no more than your reasonable cost of ++ physically performing this conveying of source, or (2) access ++ to copy the Corresponding Source from a network server at no ++ charge. ++ ++ c. Convey individual copies of the object code with a copy of ++ the written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, ++ and only if you received the object code with such an offer, ++ in accord with subsection 6b. ++ ++ d. Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access ++ to the Corresponding Source in the same way through the same ++ place at no further charge. You need not require recipients ++ to copy the Corresponding Source along with the object code. ++ If the place to copy the object code is a network server, the ++ Corresponding Source may be on a different server (operated ++ by you or a third party) that supports equivalent copying ++ facilities, provided you maintain clear directions next to ++ the object code saying where to find the Corresponding Source. ++ Regardless of what server hosts the Corresponding Source, you ++ remain obligated to ensure that it is available for as long ++ as needed to satisfy these requirements. ++ ++ e. Convey the object code using peer-to-peer transmission, ++ provided you inform other peers where the object code and ++ Corresponding Source of the work are being offered to the ++ general public at no charge under subsection 6d. ++ ++ ++ A separable portion of the object code, whose source code is ++ excluded from the Corresponding Source as a System Library, need ++ not be included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means ++ any tangible personal property which is normally used for personal, ++ family, or household purposes, or (2) anything designed or sold for ++ incorporation into a dwelling. In determining whether a product ++ is a consumer product, doubtful cases shall be resolved in favor of ++ coverage. For a particular product received by a particular user, ++ "normally used" refers to a typical or common use of that class of ++ product, regardless of the status of the particular user or of the ++ way in which the particular user actually uses, or expects or is ++ expected to use, the product. A product is a consumer product ++ regardless of whether the product has substantial commercial, ++ industrial or non-consumer uses, unless such uses represent the ++ only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++ procedures, authorization keys, or other information required to ++ install and execute modified versions of a covered work in that ++ User Product from a modified version of its Corresponding Source. ++ The information must suffice to ensure that the continued ++ functioning of the modified object code is in no case prevented or ++ interfered with solely because modification has been made. ++ ++ If you convey an object code work under this section in, or with, ++ or specifically for use in, a User Product, and the conveying ++ occurs as part of a transaction in which the right of possession ++ and use of the User Product is transferred to the recipient in ++ perpetuity or for a fixed term (regardless of how the transaction ++ is characterized), the Corresponding Source conveyed under this ++ section must be accompanied by the Installation Information. But ++ this requirement does not apply if neither you nor any third party ++ retains the ability to install modified object code on the User ++ Product (for example, the work has been installed in ROM). ++ ++ The requirement to provide Installation Information does not ++ include a requirement to continue to provide support service, ++ warranty, or updates for a work that has been modified or ++ installed by the recipient, or for the User Product in which it ++ has been modified or installed. Access to a network may be denied ++ when the modification itself materially and adversely affects the ++ operation of the network or violates the rules and protocols for ++ communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information ++ provided, in accord with this section must be in a format that is ++ publicly documented (and with an implementation available to the ++ public in source code form), and must require no special password ++ or key for unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of ++ this License by making exceptions from one or more of its ++ conditions. Additional permissions that are applicable to the ++ entire Program shall be treated as though they were included in ++ this License, to the extent that they are valid under applicable ++ law. If additional permissions apply only to part of the Program, ++ that part may be used separately under those permissions, but the ++ entire Program remains governed by this License without regard to ++ the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++ remove any additional permissions from that copy, or from any part ++ of it. (Additional permissions may be written to require their own ++ removal in certain cases when you modify the work.) You may place ++ additional permissions on material, added by you to a covered work, ++ for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material ++ you add to a covered work, you may (if authorized by the copyright ++ holders of that material) supplement the terms of this License ++ with terms: ++ ++ a. Disclaiming warranty or limiting liability differently from ++ the terms of sections 15 and 16 of this License; or ++ ++ b. Requiring preservation of specified reasonable legal notices ++ or author attributions in that material or in the Appropriate ++ Legal Notices displayed by works containing it; or ++ ++ c. Prohibiting misrepresentation of the origin of that material, ++ or requiring that modified versions of such material be ++ marked in reasonable ways as different from the original ++ version; or ++ ++ d. Limiting the use for publicity purposes of names of licensors ++ or authors of the material; or ++ ++ e. Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f. Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified ++ versions of it) with contractual assumptions of liability to ++ the recipient, for any liability that these contractual ++ assumptions directly impose on those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++ restrictions" within the meaning of section 10. If the Program as ++ you received it, or any part of it, contains a notice stating that ++ it is governed by this License along with a term that is a further ++ restriction, you may remove that term. If a license document ++ contains a further restriction but permits relicensing or ++ conveying under this License, you may add to a covered work ++ material governed by the terms of that license document, provided ++ that the further restriction does not survive such relicensing or ++ conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++ must place, in the relevant source files, a statement of the ++ additional terms that apply to those files, or a notice indicating ++ where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in ++ the form of a separately written license, or stated as exceptions; ++ the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++ provided under this License. Any attempt otherwise to propagate or ++ modify it is void, and will automatically terminate your rights ++ under this License (including any patent licenses granted under ++ the third paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++ license from a particular copyright holder is reinstated (a) ++ provisionally, unless and until the copyright holder explicitly ++ and finally terminates your license, and (b) permanently, if the ++ copyright holder fails to notify you of the violation by some ++ reasonable means prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++ reinstated permanently if the copyright holder notifies you of the ++ violation by some reasonable means, this is the first time you have ++ received notice of violation of this License (for any work) from ++ that copyright holder, and you cure the violation prior to 30 days ++ after your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate ++ the licenses of parties who have received copies or rights from ++ you under this License. If your rights have been terminated and ++ not permanently reinstated, you do not qualify to receive new ++ licenses for the same material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++ run a copy of the Program. Ancillary propagation of a covered work ++ occurring solely as a consequence of using peer-to-peer ++ transmission to receive a copy likewise does not require ++ acceptance. However, nothing other than this License grants you ++ permission to propagate or modify any covered work. These actions ++ infringe copyright if you do not accept this License. Therefore, ++ by modifying or propagating a covered work, you indicate your ++ acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++ receives a license from the original licensors, to run, modify and ++ propagate that work, subject to this License. You are not ++ responsible for enforcing compliance by third parties with this ++ License. ++ ++ An "entity transaction" is a transaction transferring control of an ++ organization, or substantially all assets of one, or subdividing an ++ organization, or merging organizations. If propagation of a ++ covered work results from an entity transaction, each party to that ++ transaction who receives a copy of the work also receives whatever ++ licenses to the work the party's predecessor in interest had or ++ could give under the previous paragraph, plus a right to ++ possession of the Corresponding Source of the work from the ++ predecessor in interest, if the predecessor has it or can get it ++ with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++ rights granted or affirmed under this License. For example, you ++ may not impose a license fee, royalty, or other charge for ++ exercise of rights granted under this License, and you may not ++ initiate litigation (including a cross-claim or counterclaim in a ++ lawsuit) alleging that any patent claim is infringed by making, ++ using, selling, offering for sale, or importing the Program or any ++ portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++ License of the Program or a work on which the Program is based. ++ The work thus licensed is called the contributor's "contributor ++ version". ++ ++ A contributor's "essential patent claims" are all patent claims ++ owned or controlled by the contributor, whether already acquired or ++ hereafter acquired, that would be infringed by some manner, ++ permitted by this License, of making, using, or selling its ++ contributor version, but do not include claims that would be ++ infringed only as a consequence of further modification of the ++ contributor version. For purposes of this definition, "control" ++ includes the right to grant patent sublicenses in a manner ++ consistent with the requirements of this License. ++ ++ Each contributor grants you a non-exclusive, worldwide, ++ royalty-free patent license under the contributor's essential ++ patent claims, to make, use, sell, offer for sale, import and ++ otherwise run, modify and propagate the contents of its ++ contributor version. ++ ++ In the following three paragraphs, a "patent license" is any ++ express agreement or commitment, however denominated, not to ++ enforce a patent (such as an express permission to practice a ++ patent or covenant not to sue for patent infringement). To ++ "grant" such a patent license to a party means to make such an ++ agreement or commitment not to enforce a patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent ++ license, and the Corresponding Source of the work is not available ++ for anyone to copy, free of charge and under the terms of this ++ License, through a publicly available network server or other ++ readily accessible means, then you must either (1) cause the ++ Corresponding Source to be so available, or (2) arrange to deprive ++ yourself of the benefit of the patent license for this particular ++ work, or (3) arrange, in a manner consistent with the requirements ++ of this License, to extend the patent license to downstream ++ recipients. "Knowingly relying" means you have actual knowledge ++ that, but for the patent license, your conveying the covered work ++ in a country, or your recipient's use of the covered work in a ++ country, would infringe one or more identifiable patents in that ++ country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++ arrangement, you convey, or propagate by procuring conveyance of, a ++ covered work, and grant a patent license to some of the parties ++ receiving the covered work authorizing them to use, propagate, ++ modify or convey a specific copy of the covered work, then the ++ patent license you grant is automatically extended to all ++ recipients of the covered work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++ the scope of its coverage, prohibits the exercise of, or is ++ conditioned on the non-exercise of one or more of the rights that ++ are specifically granted under this License. You may not convey a ++ covered work if you are a party to an arrangement with a third ++ party that is in the business of distributing software, under ++ which you make payment to the third party based on the extent of ++ your activity of conveying the work, and under which the third ++ party grants, to any of the parties who would receive the covered ++ work from you, a discriminatory patent license (a) in connection ++ with copies of the covered work conveyed by you (or copies made ++ from those copies), or (b) primarily for and in connection with ++ specific products or compilations that contain the covered work, ++ unless you entered into that arrangement, or that patent license ++ was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++ any implied license or other defenses to infringement that may ++ otherwise be available to you under applicable patent law. + +- 6. Each time you redistribute the Program (or any work based on the +- Program), the recipient automatically receives a license from the +- original licensor to copy, distribute or modify the Program +- subject to these terms and conditions. You may not impose any +- further restrictions on the recipients' exercise of the rights +- granted herein. You are not responsible for enforcing compliance +- by third parties to this License. ++ 12. No Surrender of Others' Freedom. + +- 7. If, as a consequence of a court judgment or allegation of patent +- infringement or for any other reason (not limited to patent +- issues), conditions are imposed on you (whether by court order, ++ If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this +- License. If you cannot distribute so as to satisfy simultaneously +- your obligations under this License and any other pertinent +- obligations, then as a consequence you may not distribute the +- Program at all. For example, if a patent license would not permit +- royalty-free redistribution of the Program by all those who +- receive copies directly or indirectly through you, then the only +- way you could satisfy both it and this License would be to refrain +- entirely from distribution of the Program. +- +- If any portion of this section is held invalid or unenforceable +- under any particular circumstance, the balance of the section is +- intended to apply and the section as a whole is intended to apply +- in other circumstances. +- +- It is not the purpose of this section to induce you to infringe any +- patents or other property right claims or to contest validity of +- any such claims; this section has the sole purpose of protecting +- the integrity of the free software distribution system, which is +- implemented by public license practices. Many people have made +- generous contributions to the wide range of software distributed +- through that system in reliance on consistent application of that +- system; it is up to the author/donor to decide if he or she is +- willing to distribute software through any other system and a +- licensee cannot impose that choice. +- +- This section is intended to make thoroughly clear what is believed +- to be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +- certain countries either by patents or by copyrighted interfaces, +- the original copyright holder who places the Program under this +- License may add an explicit geographical distribution limitation +- excluding those countries, so that distribution is permitted only +- in or among countries not thus excluded. In such case, this +- License incorporates the limitation as if written in the body of +- this License. +- +- 9. The Free Software Foundation may publish revised and/or new +- versions of the General Public License from time to time. Such +- new versions will be similar in spirit to the present version, but +- may differ in detail to address new problems or concerns. ++ License. If you cannot convey a covered work so as to satisfy ++ simultaneously your obligations under this License and any other ++ pertinent obligations, then as a consequence you may not convey it ++ at all. For example, if you agree to terms that obligate you to ++ collect a royalty for further conveying from those to whom you ++ convey the Program, the only way you could satisfy both those ++ terms and this License would be to refrain entirely from conveying ++ the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++ permission to link or combine any covered work with a work licensed ++ under version 3 of the GNU Affero General Public License into a ++ single combined work, and to convey the resulting work. The terms ++ of this License will continue to apply to the part which is the ++ covered work, but the special requirements of the GNU Affero ++ General Public License, section 13, concerning interaction through ++ a network will apply to the combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new ++ versions of the GNU General Public License from time to time. ++ Such new versions will be similar in spirit to the present ++ version, but may differ in detail to address new problems or ++ concerns. + + Each version is given a distinguishing version number. If the +- Program specifies a version number of this License which applies +- to it and "any later version", you have the option of following +- the terms and conditions either of that version or of any later +- version published by the Free Software Foundation. If the Program +- does not specify a version number of this License, you may choose ++ Program specifies that a certain numbered version of the GNU ++ General Public License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that numbered version or of any later version published by the ++ Free Software Foundation. If the Program does not specify a ++ version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + +- 10. If you wish to incorporate parts of the Program into other free +- programs whose distribution conditions are different, write to the +- author to ask for permission. For software which is copyrighted +- by the Free Software Foundation, write to the Free Software +- Foundation; we sometimes make exceptions for this. Our decision +- will be guided by the two goals of preserving the free status of +- all derivatives of our free software and of promoting the sharing +- and reuse of software generally. ++ If the Program specifies that a proxy can decide which future ++ versions of the GNU General Public License can be used, that ++ proxy's public statement of acceptance of a version permanently ++ authorizes you to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++ permissions. However, no additional obligations are imposed on any ++ author or copyright holder as a result of your choosing to follow a ++ later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE ++ COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" ++ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, ++ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE ++ RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. ++ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL ++ NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ++ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES ++ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU ++ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR ++ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE ++ THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA ++ BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD ++ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF ++ THE POSSIBILITY OF SUCH DAMAGES. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++ above cannot be given local legal effect according to their terms, ++ reviewing courts shall apply local law that most closely ++ approximates an absolute waiver of all civil liability in ++ connection with the Program, unless a warranty or assumption of ++ liability accompanies a copy of the Program in return for a fee. + +- NO WARRANTY +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO +- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE +- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT +- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE +- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY +- SERVICING, REPAIR OR CORRECTION. + +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY +- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE +- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU +- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY +- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN +- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ++END OF TERMS AND CONDITIONS ++=========================== + +- END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + ============================================= + +@@ -32997,59 +33497,52 @@ + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. ++state the exclusion of warranty; and each file should have at least the ++"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. +- Copyright (C) YEAR NAME OF AUTHOR ++ Copyright (C) YEAR NAME OF AUTHOR + +- This program is free software; you can redistribute it and/or modify ++ This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. ++ the Free Software Foundation, either version 3 of the License, or (at ++ your option) any later version. + +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT 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 +- along with this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ along with this program. If not, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper + mail. + +- If the program is interactive, make it output a short notice like +-this when it starts in an interactive mode: ++ If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: + +- Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +- type `show w'. ++ PROGRAM Copyright (C) YEAR NAME OF AUTHOR ++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +-appropriate parts of the General Public License. Of course, the +-commands you use may be called something other than `show w' and `show +-c'; they could even be mouse-clicks or menu items - whatever suits your +-program. ++appropriate parts of the General Public License. Of course, your ++program's commands might be different; for a GUI interface, you would ++use an "about box". + + You should also get your employer (if you work as a programmer) or +-your school, if any, to sign a "copyright disclaimer" for the program, +-if necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- SIGNATURE OF TY COON, 1 April 1989 +- Ty Coon, President of Vice ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. For more information on this, and how to apply and follow ++the GNU GPL, see `http://www.gnu.org/licenses/'. + +- This General Public License does not permit incorporating your ++ The GNU General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the +-GNU Lesser General Public License instead of this License. ++GNU Lesser General Public License instead of this License. But first, ++please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + +  + File: gpc-es.info, Node: Library Copying, Next: Demo Copying, Prev: Copying, Up: Top +@@ -33593,7 +34086,7 @@ + + This demo program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +-published by the Free Software Foundation; either version 2, or (at ++published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This demo program is distributed in the hope that it will be useful, +@@ -35898,6 +36391,7 @@ + * Read: Read. (line 6) + * ReadLn: ReadLn. (line 6) + * ReadStr: ReadStr. (line 6) ++* ReadString: ReadString. (line 6) + * Real <1>: Real. (line 6) + * Real: Real Types. (line 6) + * record <1>: Keywords. (line 301) +@@ -36003,6 +36497,7 @@ + * String, Intrinsic, Data Types: String Types. (line 6) + * string, slice access: String Slice Access. (line 6) + * String2CString: String2CString. (line 6) ++* StringOf: StringOf. (line 6) + * Strings: Strings. (line 6) + * strings, operations: String Operations. (line 6) + * StringUtils: StringUtils. (line 6) +@@ -36131,591 +36626,593 @@ + Node: Welcome3369 + Node: Highlights8570 + Node: News20596 +-Node: FAQ35956 +-Node: GNU Pascal36650 +-Node: What and why37020 +-Node: Current version38943 +-Node: Turbo Pascal compatibility39833 +-Node: Supported platforms40711 +-Node: Installing GPC42233 +-Node: Documentation files42981 +-Node: Components43542 +-Node: Debugger44183 +-Node: Libraries46170 +-Node: Contributed units50172 +-Node: IDE50503 +-Node: GPC on DJGPP51760 +-Node: What is DJGPP52682 +-Node: DJGPP FAQ53227 +-Node: DJGPP download53721 +-Node: Installing GPC on DJGPP54445 +-Node: DJGPP Info reader56421 +-Node: DJGPP DPMI server56744 +-Node: Assembler syntax57182 +-Node: DJGPP specific code58689 +-Node: Stack size61080 +-Node: Strings in GPC62751 +-Node: String schema63300 +-Node: Strings in variant records64261 +-Node: Length byte66231 +-Node: Strings as value parameters67020 +-Node: Short strings67811 +-Node: C strings68734 +-Node: Getting Help70243 +-Node: Miscellaneous FAQ70946 +-Node: Contributing71217 +-Node: GPC web site71481 +-Node: About the FAQ71855 +-Node: Installation72659 +-Node: Download73203 +-Node: Binary Distributions78719 +-Node: Compiling GPC81350 +-Node: Compilation Notes91854 +-Node: MS-DOS with DJGPP92290 +-Node: MS-DOS or OS/2 with EMX93280 +-Node: MS Windows 95/98/NT93837 +-Node: Cross-Compilers94614 +-Node: Crossbuilding96027 +-Node: Invoking GPC96872 +-Node: GPC Command Line Options99233 +-Node: GPC Options116675 +-Node: Programming126529 +-Node: Source Structures128170 +-Node: The Program129280 +-Node: Label Declaration130865 +-Node: Constant Declaration131271 +-Node: Type Declaration135221 +-Node: Variable Declaration138022 +-Node: Subroutine Declaration139590 +-Node: The Procedure139877 +-Node: The Function140708 +-Node: The Operator142163 +-Node: Subroutine Parameter List Declaration142488 +-Node: Statements148441 +-Node: Assignment148878 +-Node: begin end Compound Statement149406 +-Node: if Statement149892 +-Node: case Statement150658 +-Node: for Statement152543 +-Node: while Statement154843 +-Node: repeat Statement155363 +-Node: asm Inline155911 +-Node: with Statement156367 +-Node: goto Statement156517 +-Node: Procedure Call156757 +-Node: The Declaring Statement157123 +-Node: Loop Control Statements158262 +-Node: Modules and Units158725 +-Node: Modules159046 +-Node: Units162970 +-Node: Data Types165169 +-Node: Type Definition166085 +-Node: Ordinal Types166602 +-Node: Integer Types167787 +-Node: Natural Integer Types168585 +-Node: Main Branch Integer Types169507 +-Node: Integer Types with Specified Size171697 +-Node: Integer Types and Compatibility173050 +-Node: Summary of Integer Types174561 +-Node: Real Types177282 +-Node: String Types179037 +-Node: Character Types179904 +-Node: Enumerated Types180208 +-Node: File Types181219 +-Node: Boolean (Intrinsic)182281 +-Node: Pointer (Intrinsic)183017 +-Node: Type Definition Possibilities183419 +-Node: Subrange Types184195 +-Node: Array Types185434 +-Node: Record Types186554 +-Node: Variant Records188009 +-Node: Schema Types188993 +-Node: Set Types196004 +-Node: Pointer Types197155 +-Node: Procedural Types198915 +-Node: Object Types201527 +-Node: Type Initializers201847 +-Node: Restricted Types203493 +-Node: Machine-dependencies in Types205677 +-Node: Endianness205994 +-Node: Alignment209606 +-Node: Operators209771 +-Node: Built-in Operators210114 +-Node: User-defined Operators211043 +-Node: Parameters212438 +-Node: Protected Parameters212837 +-Node: Conformant Arrays213628 +-Node: Open Arrays213920 +-Node: String Slice Access214699 +-Node: Pointer Arithmetics216022 +-Node: Type Casts217321 +-Node: OOP221636 +-Node: Compiler Directives226409 +-Node: Library Routines234339 +-Node: File Routines234941 +-Node: String Operations240358 +-Node: Accessing Command Line Arguments242976 +-Node: Memory Management Routines243812 +-Node: Operations for Integer and Ordinal Types244798 +-Node: Complex Number Operations246162 +-Node: Set Operations248220 +-Node: Date And Time Routines250502 +-Node: Other Languages251243 +-Node: Importing Libraries from Other Languages252172 +-Node: Exporting GPC Libraries to Other Languages255596 +-Node: Notes for Debugging257782 +-Node: I18N258835 +-Node: Run Time System263405 +-Node: GPC Units372479 +-Node: CRT374659 +-Node: Dos413629 +-Node: DosUnix422918 +-Node: FileUtils428026 +-Node: GMP434451 +-Node: GPCUtil466025 +-Node: HeapMon474449 +-Node: Intl478161 +-Node: MD5486075 +-Node: Overlay488952 +-Node: Pipes491502 +-Node: Ports501740 +-Node: Printer505405 +-Node: RegEx509423 +-Node: Strings522217 +-Node: StringUtils525634 +-Node: System538526 +-Node: TFDD554128 +-Node: Trap556222 +-Node: Turbo3560546 +-Node: WinDos563042 +-Node: Borland Pascal569385 +-Node: BP Compatibility570722 +-Node: BP Incompatibilities572122 +-Node: String type573986 +-Node: Qualified identifiers576100 +-Node: Assembler576501 +-Node: Move; FillChar577638 +-Node: Real type578285 +-Node: Graph unit579446 +-Node: OOP units580797 +-Node: Keep; GetIntVec; SetIntVec581168 +-Node: TFDDs582005 +-Node: Mem; Port; Ptr; Seg; Ofs; PrefixSeg; etc.582521 +-Node: Endianness assumptions584260 +-Node: - -borland-pascal - disable GPC extensions587124 +-Node: -w - disable all warnings587868 +-Node: - -uses=System - Swap; HeapError; etc.588350 +-Node: -D__BP_TYPE_SIZES__ - small integer types etc.588978 +-Node: - -pack-struct - disable structure alignment589728 +-Node: -D__BP_RANDOM__ - BP compatible pseudo random number generator590306 +-Node: -D__BP_UNPORTABLE_ROUTINES__ - Intr; DosVersion; etc.591350 +-Node: -D__BP_PARAMSTR_0__ - BP compatible ParamStr (0) behaviour592562 +-Node: IDE versus command line593902 +-Node: Comments598592 +-Node: BP Compatible Compiler Directives600017 +-Node: Units; GPI files and Automake600491 +-Node: Optimization603544 +-Node: Debugging604531 +-Node: Objects605437 +-Node: Strings in BP and GPC606003 +-Node: Typed Constants608071 +-Node: Bit; Byte and Memory Manipulation609750 +-Node: User-defined Operators in GPC612657 +-Node: Data Types in BP and GPC613385 +-Node: BP Procedural Types616955 +-Node: Files618905 +-Node: Built-in Constants619652 +-Node: Built-in Operators in BP and GPC620040 +-Node: Built-in Procedures and Functions620798 +-Node: Special Parameters622003 +-Node: Miscellaneous623205 +-Node: BP and Extended Pascal625624 +-Node: Portability hints628093 +-Node: Reference633568 +-Node: Abs638094 +-Node: absolute639288 +-Node: abstract642377 +-Node: Addr642718 +-Node: AlignOf643703 +-Node: all644590 +-Node: and644903 +-Node: and then647545 +-Node: and_then648381 +-Node: AnsiChar650461 +-Node: AnyFile651212 +-Node: Append653110 +-Node: ArcCos654549 +-Node: ArcSin655248 +-Node: ArcTan655955 +-Node: Arg656737 +-Node: array657434 +-Node: as658660 +-Node: asm659036 +-Node: asmname659473 +-Node: Assert659820 +-Node: Assign660593 +-Node: Assigned661005 +-Node: attribute661976 +-Node: begin664427 +-Node: Bind665299 +-Node: bindable665703 +-Node: Binding666111 +-Node: BindingType666525 +-Node: BitSizeOf669011 +-Node: BlockRead670170 +-Node: BlockWrite670649 +-Node: Boolean671139 +-Node: Break671942 +-Node: Byte673063 +-Node: ByteBool673927 +-Node: ByteCard674810 +-Node: ByteInt675633 +-Node: c676517 +-Node: Card676829 +-Node: Cardinal677426 +-Node: case678471 +-Node: CBoolean680675 +-Node: CCardinal681539 +-Node: Char682275 +-Node: ChDir683061 +-Node: Chr683902 +-Node: CInteger684497 +-Node: c_language685223 +-Node: class685564 +-Node: Close685904 +-Node: Cmplx686206 +-Node: Comp686777 +-Node: CompilerAssert687570 +-Node: Complex689235 +-Node: Concat689835 +-Node: Conjugate690223 +-Node: const690972 +-Node: constructor692637 +-Node: Continue692993 +-Node: Copy693932 +-Node: Cos695441 +-Node: CString696137 +-Node: CString2String696584 +-Node: CStringCopyString696946 +-Node: CurrentRoutineName697357 +-Node: CWord698013 +-Node: Cycle698778 +-Node: Date699690 +-Node: Dec700300 +-Node: DefineSize701712 +-Node: Delete702055 +-Node: destructor702530 +-Node: Discard702877 +-Node: Dispose704330 +-Node: div704880 +-Node: do705394 +-Node: Double706173 +-Node: downto706739 +-Node: else707295 +-Node: Empty708716 +-Node: end709038 +-Node: EOF709988 +-Node: EOLn710364 +-Node: EpsReal710745 +-Node: EQ711025 +-Node: EQPad711336 +-Node: Erase711641 +-Node: except711947 +-Node: Exclude712210 +-Node: Exit713110 +-Node: Exp714532 +-Node: export715361 +-Node: exports716564 +-Node: Extend716873 +-Node: Extended718351 +-Node: external718783 +-Node: Fail719190 +-Node: False719453 +-Node: far720322 +-Node: file721158 +-Node: FilePos721678 +-Node: FileSize722003 +-Node: FillChar722336 +-Node: finalization722751 +-Node: Finalize723186 +-Node: finally723984 +-Node: Flush724252 +-Node: for724557 +-Node: FormatString726201 +-Node: forward726489 +-Node: Frac726841 +-Node: FrameAddress728115 +-Node: FreeMem728404 +-Node: function729274 +-Node: GE729634 +-Node: GEPad729946 +-Node: Get730249 +-Node: GetMem730634 +-Node: GetTimeStamp731905 +-Node: goto732480 +-Node: GT732900 +-Node: GTPad733208 +-Node: Halt733512 +-Node: High734221 +-Node: if735640 +-Node: Im737139 +-Node: implementation737712 +-Node: import738086 +-Node: in740097 +-Node: Inc741172 +-Node: Include742642 +-Node: Index743536 +-Node: inherited743818 +-Node: initialization744223 +-Node: Initialize744673 +-Node: InOutRes745454 +-Node: Input745768 +-Node: Insert746109 +-Node: Int746450 +-Node: Integer747784 +-Node: interface748592 +-Node: interrupt748949 +-Node: IOResult749308 +-Node: is749616 +-Node: label749959 +-Node: LastPosition750332 +-Node: LE750694 +-Node: Leave751010 +-Node: Length752128 +-Node: LEPad752460 +-Node: library752771 +-Node: Ln753080 +-Node: LoCase753815 +-Node: LongBool754119 +-Node: LongCard755013 +-Node: LongestBool755831 +-Node: LongestCard756756 +-Node: LongestInt757560 +-Node: LongestReal758372 +-Node: LongestWord758872 +-Node: LongInt759696 +-Node: LongReal760580 +-Node: LongWord761016 +-Node: Low761837 +-Node: LT763069 +-Node: LTPad763376 +-Node: Mark763680 +-Node: Max763974 +-Node: MaxChar764289 +-Node: MaxInt764628 +-Node: MaxReal765050 +-Node: MedBool765355 +-Node: MedCard766235 +-Node: MedInt767118 +-Node: MedReal767957 +-Node: MedWord768373 +-Node: Min769258 +-Node: MinReal769576 +-Node: MkDir769876 +-Node: mod770700 +-Node: module771097 +-Node: Move771425 +-Node: MoveLeft771752 +-Node: MoveRight772095 +-Node: name772442 +-Node: NE775534 +-Node: near775841 +-Node: NEPad776672 +-Node: New776977 +-Node: NewCString777878 +-Node: nil778208 +-Node: not779687 +-Node: Null780165 +-Node: object781656 +-Node: Odd782471 +-Node: of783192 +-Node: on783635 +-Node: only783876 +-Node: operator784190 +-Node: or784497 +-Node: Ord787091 +-Node: or else788028 +-Node: or_else788831 +-Node: otherwise790775 +-Node: Output792182 +-Node: overload792531 +-Node: override792804 +-Node: Pack793143 +-Node: packed793633 +-Node: Page795395 +-Node: PAnsiChar795753 +-Node: ParamCount796219 +-Node: ParamStr797036 +-Node: PChar797877 +-Node: Pi798344 +-Node: PObjectType798602 +-Node: Pointer800081 +-Node: Polar800566 +-Node: Pos800890 +-Node: Position801207 +-Node: pow801548 +-Node: Pred802025 +-Node: private804049 +-Node: procedure804485 +-Node: program804855 +-Node: property805224 +-Node: protected805565 +-Node: PtrCard806132 +-Node: PtrDiffType806727 +-Node: PtrInt807435 +-Node: PtrWord808016 +-Node: public808604 +-Node: published809039 +-Node: Put809479 +-Node: qualified809871 +-Node: raise810203 +-Node: Random810468 +-Node: Randomize810737 +-Node: Re811012 +-Node: Read811519 +-Node: ReadLn811960 +-Node: ReadStr812359 +-Node: Real812697 +-Node: record813228 +-Node: Release815786 +-Node: Rename816095 +-Node: repeat816425 +-Node: Reset817456 +-Node: resident818768 +-Node: restricted819098 +-Node: Result819449 +-Node: Return820001 +-Node: ReturnAddress820274 +-Node: Rewrite820569 +-Node: RmDir823287 +-Node: Round824108 +-Node: RunError825712 +-Node: Seek826034 +-Node: SeekEOF826363 +-Node: SeekEOLn826686 +-Node: SeekRead827017 +-Node: SeekUpdate827384 +-Node: SeekWrite827760 +-Node: segment828131 +-Node: Self828445 +-Node: set828726 +-Node: SetFileTime830287 +-Node: SetLength830669 +-Node: SetType831770 +-Node: shl834341 +-Node: ShortBool835307 +-Node: ShortCard836205 +-Node: ShortInt837016 +-Node: ShortReal837871 +-Node: ShortWord838316 +-Node: shr839272 +-Node: Sin840461 +-Node: Single841155 +-Node: SizeOf841460 +-Node: SizeType842307 +-Node: SmallInt842868 +-Node: Sqr843627 +-Node: SqRt844465 +-Node: StandardError845500 +-Node: StandardInput845799 +-Node: StandardOutput846124 +-Node: StdErr846445 +-Node: Str847244 +-Node: String848016 +-Node: String2CString848311 +-Node: SubStr848667 +-Node: Succ849882 +-Node: Text851898 +-Node: then852412 +-Node: Time852995 +-Node: TimeStamp853610 +-Node: to855741 +-Node: to begin do856172 +-Node: to end do856492 +-Node: Trim856811 +-Node: True857127 +-Node: Trunc857994 +-Node: Truncate859386 +-Node: try859704 +-Node: type859955 +-Node: type of862486 +-Node: TypeOf862735 +-Node: Unbind863932 +-Node: unit864325 +-Node: Unpack864640 +-Node: until865139 +-Node: UpCase865570 +-Node: Update865879 +-Node: uses866201 +-Node: Val867661 +-Node: value869548 +-Node: var870087 +-Node: view872423 +-Node: virtual872773 +-Node: Void873119 +-Node: while873598 +-Node: with874540 +-Node: Word874955 +-Node: WordBool875776 +-Node: Write876656 +-Node: WriteLn877157 +-Node: WriteStr877610 +-Node: xor877977 +-Node: Keywords879478 +-Node: Support889707 +-Node: Mailing List891312 +-Node: Mailing List Archives893549 +-Node: Newsgroups894221 +-Node: Professional Support895485 +-Node: Compiler Crashes896231 +-Node: Reporting Bugs896868 +-Node: Testing908448 +-Node: To Do910393 +-Node: Known Bugs912042 +-Node: Planned Features913241 +-Node: Planned - Strings914250 +-Node: Planned - OOP916175 +-Node: Planned - Other types918228 +-Node: Planned - Misc919408 +-Node: Planned - Utilities921307 +-Node: Fixed Bugs921859 +-Node: Internals945071 +-Node: Preprocessor948630 +-Node: Lexical analyzer951100 +-Node: Lexer problems952053 +-Node: BP character constants955152 +-Node: Compiler directives internally960408 +-Node: Syntax parsing963770 +-Node: Parsing conflicts967306 +-Node: Parsing keywords970501 +-Node: forward near far973071 +-Node: Tree nodes974406 +-Node: Parameter passing979208 +-Node: GPI files981675 +-Node: Automake994510 +-Node: File Layout997060 +-Node: Planned997846 +-Node: Copying1001917 +-Node: Library Copying1021105 +-Node: Demo Copying1049258 +-Node: Acknowledgments1050890 +-Node: Resources1065714 +-Node: GNU1071043 +-Node: Manifesto1074580 +-Node: Gnu is Not Unix1075879 +-Ref: Gnu is Not Unix-Footnote-11078244 +-Node: Why GNU1079134 +-Node: GNU Unix Compatibility1080213 +-Node: GNU Availability1080668 +-Node: Why Help GNU1081139 +-Node: How To Contribute to GNU1082545 +-Node: GNU Benefits1084376 +-Ref: GNU Benefits-Footnote-11086640 +-Node: Objections to GNU1086914 +-Ref: Objections to GNU-Footnote-11101424 +-Ref: Objections to GNU-Footnote-21101466 +-Ref: Objections to GNU-Footnote-31101986 +-Node: Funding1102092 +-Node: Index-GPC1104573 ++Node: FAQ36324 ++Node: GNU Pascal37018 ++Node: What and why37388 ++Node: Current version39311 ++Node: Turbo Pascal compatibility40201 ++Node: Supported platforms41079 ++Node: Installing GPC42601 ++Node: Documentation files43349 ++Node: Components43910 ++Node: Debugger44551 ++Node: Libraries46538 ++Node: Contributed units50540 ++Node: IDE50871 ++Node: GPC on DJGPP52128 ++Node: What is DJGPP53050 ++Node: DJGPP FAQ53595 ++Node: DJGPP download54089 ++Node: Installing GPC on DJGPP54813 ++Node: DJGPP Info reader56789 ++Node: DJGPP DPMI server57112 ++Node: Assembler syntax57550 ++Node: DJGPP specific code59057 ++Node: Stack size61448 ++Node: Strings in GPC63119 ++Node: String schema63668 ++Node: Strings in variant records64629 ++Node: Length byte66599 ++Node: Strings as value parameters67388 ++Node: Short strings68179 ++Node: C strings69102 ++Node: Getting Help70611 ++Node: Miscellaneous FAQ71314 ++Node: Contributing71585 ++Node: GPC web site71849 ++Node: About the FAQ72223 ++Node: Installation73027 ++Node: Download73571 ++Node: Binary Distributions79087 ++Node: Compiling GPC81718 ++Node: Compilation Notes92222 ++Node: MS-DOS with DJGPP92658 ++Node: MS-DOS or OS/2 with EMX93648 ++Node: MS Windows 95/98/NT94205 ++Node: Cross-Compilers94982 ++Node: Crossbuilding96395 ++Node: Invoking GPC97240 ++Node: GPC Command Line Options99601 ++Node: GPC Options117043 ++Node: Programming126897 ++Node: Source Structures128538 ++Node: The Program129648 ++Node: Label Declaration131233 ++Node: Constant Declaration131639 ++Node: Type Declaration135589 ++Node: Variable Declaration138390 ++Node: Subroutine Declaration139958 ++Node: The Procedure140245 ++Node: The Function141076 ++Node: The Operator142531 ++Node: Subroutine Parameter List Declaration142856 ++Node: Statements148809 ++Node: Assignment149246 ++Node: begin end Compound Statement149774 ++Node: if Statement150260 ++Node: case Statement151026 ++Node: for Statement152911 ++Node: while Statement155211 ++Node: repeat Statement155731 ++Node: asm Inline156279 ++Node: with Statement156735 ++Node: goto Statement156885 ++Node: Procedure Call157125 ++Node: The Declaring Statement157491 ++Node: Loop Control Statements158630 ++Node: Modules and Units159093 ++Node: Modules159414 ++Node: Units163338 ++Node: Data Types165537 ++Node: Type Definition166453 ++Node: Ordinal Types166970 ++Node: Integer Types168155 ++Node: Natural Integer Types168953 ++Node: Main Branch Integer Types169875 ++Node: Integer Types with Specified Size172065 ++Node: Integer Types and Compatibility173418 ++Node: Summary of Integer Types174929 ++Node: Real Types177650 ++Node: String Types179405 ++Node: Character Types180272 ++Node: Enumerated Types180576 ++Node: File Types181587 ++Node: Boolean (Intrinsic)182649 ++Node: Pointer (Intrinsic)183385 ++Node: Type Definition Possibilities183787 ++Node: Subrange Types184563 ++Node: Array Types185802 ++Node: Record Types186922 ++Node: Variant Records188377 ++Node: Schema Types189361 ++Node: Set Types196372 ++Node: Pointer Types197523 ++Node: Procedural Types199283 ++Node: Object Types201895 ++Node: Type Initializers202215 ++Node: Restricted Types203861 ++Node: Machine-dependencies in Types206045 ++Node: Endianness206362 ++Node: Alignment209974 ++Node: Operators210139 ++Node: Built-in Operators210482 ++Node: User-defined Operators211411 ++Node: Parameters212806 ++Node: Protected Parameters213205 ++Node: Conformant Arrays213996 ++Node: Open Arrays214288 ++Node: String Slice Access215067 ++Node: Pointer Arithmetics216390 ++Node: Type Casts217689 ++Node: OOP222004 ++Node: Compiler Directives226777 ++Node: Library Routines234707 ++Node: File Routines235309 ++Node: String Operations240726 ++Node: Accessing Command Line Arguments243344 ++Node: Memory Management Routines244180 ++Node: Operations for Integer and Ordinal Types245166 ++Node: Complex Number Operations246530 ++Node: Set Operations248588 ++Node: Date And Time Routines250870 ++Node: Other Languages251611 ++Node: Importing Libraries from Other Languages252540 ++Node: Exporting GPC Libraries to Other Languages255964 ++Node: Notes for Debugging258150 ++Node: I18N259203 ++Node: Run Time System263773 ++Node: GPC Units374079 ++Node: CRT376259 ++Node: Dos415229 ++Node: DosUnix424518 ++Node: FileUtils429626 ++Node: GMP436051 ++Node: GPCUtil467625 ++Node: HeapMon476049 ++Node: Intl479761 ++Node: MD5487675 ++Node: Overlay490552 ++Node: Pipes493102 ++Node: Ports503340 ++Node: Printer507005 ++Node: RegEx511023 ++Node: Strings523817 ++Node: StringUtils527234 ++Node: System540126 ++Node: TFDD555728 ++Node: Trap557822 ++Node: Turbo3562146 ++Node: WinDos564642 ++Node: Borland Pascal570985 ++Node: BP Compatibility572322 ++Node: BP Incompatibilities573722 ++Node: String type575586 ++Node: Qualified identifiers577700 ++Node: Assembler578101 ++Node: Move; FillChar579238 ++Node: Real type579885 ++Node: Graph unit581046 ++Node: OOP units582397 ++Node: Keep; GetIntVec; SetIntVec582768 ++Node: TFDDs583605 ++Node: Mem; Port; Ptr; Seg; Ofs; PrefixSeg; etc.584121 ++Node: Endianness assumptions585860 ++Node: - -borland-pascal - disable GPC extensions588724 ++Node: -w - disable all warnings589468 ++Node: - -uses=System - Swap; HeapError; etc.589950 ++Node: -D__BP_TYPE_SIZES__ - small integer types etc.590578 ++Node: - -pack-struct - disable structure alignment591328 ++Node: -D__BP_RANDOM__ - BP compatible pseudo random number generator591906 ++Node: -D__BP_UNPORTABLE_ROUTINES__ - Intr; DosVersion; etc.592950 ++Node: -D__BP_PARAMSTR_0__ - BP compatible ParamStr (0) behaviour594162 ++Node: IDE versus command line595502 ++Node: Comments600192 ++Node: BP Compatible Compiler Directives601617 ++Node: Units; GPI files and Automake602091 ++Node: Optimization605144 ++Node: Debugging606131 ++Node: Objects607037 ++Node: Strings in BP and GPC607603 ++Node: Typed Constants609671 ++Node: Bit; Byte and Memory Manipulation611350 ++Node: User-defined Operators in GPC614257 ++Node: Data Types in BP and GPC614985 ++Node: BP Procedural Types618555 ++Node: Files620505 ++Node: Built-in Constants621252 ++Node: Built-in Operators in BP and GPC621640 ++Node: Built-in Procedures and Functions622398 ++Node: Special Parameters623603 ++Node: Miscellaneous624805 ++Node: BP and Extended Pascal627224 ++Node: Portability hints629693 ++Node: Reference635168 ++Node: Abs639722 ++Node: absolute640916 ++Node: abstract644005 ++Node: Addr644346 ++Node: AlignOf645331 ++Node: all646218 ++Node: and646531 ++Node: and then649173 ++Node: and_then650009 ++Node: AnsiChar652089 ++Node: AnyFile652840 ++Node: Append654738 ++Node: ArcCos656177 ++Node: ArcSin656876 ++Node: ArcTan657583 ++Node: Arg658365 ++Node: array659062 ++Node: as660288 ++Node: asm660664 ++Node: asmname661101 ++Node: Assert661448 ++Node: Assign662221 ++Node: Assigned662633 ++Node: attribute663604 ++Node: begin666055 ++Node: Bind666927 ++Node: bindable667331 ++Node: Binding667739 ++Node: BindingType668153 ++Node: BitSizeOf670639 ++Node: BlockRead671798 ++Node: BlockWrite672277 ++Node: Boolean672767 ++Node: Break673570 ++Node: Byte674691 ++Node: ByteBool675555 ++Node: ByteCard676438 ++Node: ByteInt677261 ++Node: c678145 ++Node: Card678457 ++Node: Cardinal679054 ++Node: case680099 ++Node: CBoolean682303 ++Node: CCardinal683167 ++Node: Char683903 ++Node: ChDir684689 ++Node: Chr685530 ++Node: CInteger686125 ++Node: c_language686851 ++Node: class687192 ++Node: Close687532 ++Node: Cmplx687834 ++Node: Comp688405 ++Node: CompilerAssert689198 ++Node: Complex690863 ++Node: Concat691463 ++Node: Conjugate691851 ++Node: const692600 ++Node: constructor694265 ++Node: Continue694621 ++Node: Copy695560 ++Node: Cos697069 ++Node: CString697765 ++Node: CString2String698212 ++Node: CStringCopyString698574 ++Node: CurrentRoutineName698985 ++Node: CWord699641 ++Node: Cycle700406 ++Node: Date701318 ++Node: Dec701928 ++Node: DefineSize703340 ++Node: Delete703683 ++Node: destructor704158 ++Node: Discard704505 ++Node: Dispose705958 ++Node: div706508 ++Node: do707022 ++Node: Double707801 ++Node: downto708367 ++Node: else708923 ++Node: Empty710344 ++Node: end710666 ++Node: EOF711616 ++Node: EOLn711992 ++Node: EpsReal712373 ++Node: EQ712653 ++Node: EQPad712964 ++Node: Erase713269 ++Node: except713575 ++Node: Exclude713838 ++Node: Exit714738 ++Node: Exp716160 ++Node: export716989 ++Node: exports718192 ++Node: Extend718501 ++Node: Extended719979 ++Node: external720411 ++Node: Fail720818 ++Node: False721081 ++Node: far721950 ++Node: file722786 ++Node: FilePos723306 ++Node: FileSize723631 ++Node: FillChar723964 ++Node: finalization724379 ++Node: Finalize724814 ++Node: finally725612 ++Node: Flush725880 ++Node: for726185 ++Node: FormatString727829 ++Node: forward728117 ++Node: Frac728469 ++Node: FrameAddress729743 ++Node: FreeMem730032 ++Node: function730902 ++Node: GE731262 ++Node: GEPad731574 ++Node: Get731877 ++Node: GetMem732262 ++Node: GetTimeStamp733533 ++Node: goto734108 ++Node: GT734528 ++Node: GTPad734836 ++Node: Halt735140 ++Node: High735849 ++Node: if737268 ++Node: Im738767 ++Node: implementation739340 ++Node: import739714 ++Node: in741725 ++Node: Inc742800 ++Node: Include744270 ++Node: Index745164 ++Node: inherited745446 ++Node: initialization745851 ++Node: Initialize746301 ++Node: InOutRes747082 ++Node: Input747396 ++Node: Insert747737 ++Node: Int748078 ++Node: Integer749412 ++Node: interface750220 ++Node: interrupt750577 ++Node: IOResult750936 ++Node: is751244 ++Node: label751587 ++Node: LastPosition751960 ++Node: LE752322 ++Node: Leave752638 ++Node: Length753756 ++Node: LEPad754088 ++Node: library754399 ++Node: Ln754708 ++Node: LoCase755443 ++Node: LongBool755747 ++Node: LongCard756641 ++Node: LongestBool757459 ++Node: LongestCard758384 ++Node: LongestInt759188 ++Node: LongestReal760000 ++Node: LongestWord760500 ++Node: LongInt761324 ++Node: LongReal762208 ++Node: LongWord762644 ++Node: Low763465 ++Node: LT764697 ++Node: LTPad765004 ++Node: Mark765308 ++Node: Max765602 ++Node: MaxChar765917 ++Node: MaxInt766256 ++Node: MaxReal766678 ++Node: MedBool766983 ++Node: MedCard767863 ++Node: MedInt768746 ++Node: MedReal769585 ++Node: MedWord770001 ++Node: Min770886 ++Node: MinReal771204 ++Node: MkDir771504 ++Node: mod772328 ++Node: module772725 ++Node: Move773053 ++Node: MoveLeft773380 ++Node: MoveRight773723 ++Node: name774070 ++Node: NE777162 ++Node: near777469 ++Node: NEPad778300 ++Node: New778605 ++Node: NewCString779506 ++Node: nil779836 ++Node: not781315 ++Node: Null781793 ++Node: object783284 ++Node: Odd784099 ++Node: of784820 ++Node: on785263 ++Node: only785504 ++Node: operator785818 ++Node: or786125 ++Node: Ord788719 ++Node: or else789656 ++Node: or_else790459 ++Node: otherwise792403 ++Node: Output793810 ++Node: overload794159 ++Node: override794432 ++Node: Pack794771 ++Node: packed795261 ++Node: Page797023 ++Node: PAnsiChar797381 ++Node: ParamCount797847 ++Node: ParamStr798664 ++Node: PChar799505 ++Node: Pi799972 ++Node: PObjectType800230 ++Node: Pointer801843 ++Node: Polar802328 ++Node: Pos802652 ++Node: Position802969 ++Node: pow803310 ++Node: Pred803787 ++Node: private805811 ++Node: procedure806247 ++Node: program806617 ++Node: property806986 ++Node: protected807327 ++Node: PtrCard807894 ++Node: PtrDiffType808489 ++Node: PtrInt809197 ++Node: PtrWord809778 ++Node: public810366 ++Node: published810801 ++Node: Put811241 ++Node: qualified811633 ++Node: raise811965 ++Node: Random812230 ++Node: Randomize812499 ++Node: Re812774 ++Node: Read813281 ++Node: ReadLn813722 ++Node: ReadStr814121 ++Node: ReadString814465 ++Node: Real814755 ++Node: record815289 ++Node: Release817847 ++Node: Rename818156 ++Node: repeat818486 ++Node: Reset819517 ++Node: resident820829 ++Node: restricted821159 ++Node: Result821510 ++Node: Return822062 ++Node: ReturnAddress822335 ++Node: Rewrite822630 ++Node: RmDir825348 ++Node: Round826169 ++Node: RunError827773 ++Node: Seek828095 ++Node: SeekEOF828424 ++Node: SeekEOLn828747 ++Node: SeekRead829078 ++Node: SeekUpdate829445 ++Node: SeekWrite829821 ++Node: segment830192 ++Node: Self830506 ++Node: set830787 ++Node: SetFileTime832348 ++Node: SetLength832730 ++Node: SetType833831 ++Node: shl836402 ++Node: ShortBool837368 ++Node: ShortCard838266 ++Node: ShortInt839077 ++Node: ShortReal839932 ++Node: ShortWord840377 ++Node: shr841333 ++Node: Sin842522 ++Node: Single843216 ++Node: SizeOf843521 ++Node: SizeType844368 ++Node: SmallInt844929 ++Node: Sqr845688 ++Node: SqRt846526 ++Node: StandardError847561 ++Node: StandardInput847860 ++Node: StandardOutput848185 ++Node: StdErr848506 ++Node: Str849305 ++Node: String850077 ++Node: String2CString850372 ++Node: StringOf850730 ++Node: SubStr851358 ++Node: Succ852567 ++Node: Text854583 ++Node: then855097 ++Node: Time855680 ++Node: TimeStamp856295 ++Node: to858426 ++Node: to begin do858857 ++Node: to end do859177 ++Node: Trim859496 ++Node: True859812 ++Node: Trunc860679 ++Node: Truncate862071 ++Node: try862389 ++Node: type862640 ++Node: type of865171 ++Node: TypeOf865420 ++Node: Unbind866617 ++Node: unit867010 ++Node: Unpack867325 ++Node: until867824 ++Node: UpCase868255 ++Node: Update868564 ++Node: uses868886 ++Node: Val870346 ++Node: value872233 ++Node: var872772 ++Node: view875108 ++Node: virtual875458 ++Node: Void875804 ++Node: while876283 ++Node: with877225 ++Node: Word877640 ++Node: WordBool878461 ++Node: Write879341 ++Node: WriteLn879842 ++Node: WriteStr880295 ++Node: xor880662 ++Node: Keywords882163 ++Node: Support892396 ++Node: Mailing List894001 ++Node: Mailing List Archives896238 ++Node: Newsgroups896910 ++Node: Professional Support898174 ++Node: Compiler Crashes898920 ++Node: Reporting Bugs899557 ++Node: Testing911137 ++Node: To Do913082 ++Node: Known Bugs914731 ++Node: Planned Features915930 ++Node: Planned - Strings916939 ++Node: Planned - OOP918864 ++Node: Planned - Other types920917 ++Node: Planned - Misc922097 ++Node: Planned - Utilities923996 ++Node: Fixed Bugs924548 ++Node: Internals948876 ++Node: Preprocessor952435 ++Node: Lexical analyzer954905 ++Node: Lexer problems955858 ++Node: BP character constants958957 ++Node: Compiler directives internally964213 ++Node: Syntax parsing967575 ++Node: Parsing conflicts971111 ++Node: Parsing keywords974306 ++Node: forward near far976876 ++Node: Tree nodes978211 ++Node: Parameter passing983013 ++Node: GPI files985480 ++Node: Automake998315 ++Node: File Layout1000865 ++Node: Planned1001651 ++Node: Copying1005722 ++Node: Library Copying1043289 ++Node: Demo Copying1071442 ++Node: Acknowledgments1073074 ++Node: Resources1087898 ++Node: GNU1093227 ++Node: Manifesto1096764 ++Node: Gnu is Not Unix1098063 ++Ref: Gnu is Not Unix-Footnote-11100428 ++Node: Why GNU1101318 ++Node: GNU Unix Compatibility1102397 ++Node: GNU Availability1102852 ++Node: Why Help GNU1103323 ++Node: How To Contribute to GNU1104729 ++Node: GNU Benefits1106560 ++Ref: GNU Benefits-Footnote-11108824 ++Node: Objections to GNU1109098 ++Ref: Objections to GNU-Footnote-11123608 ++Ref: Objections to GNU-Footnote-21123650 ++Ref: Objections to GNU-Footnote-31124170 ++Node: Funding1124276 ++Node: Index-GPC1126757 +  + End Tag Table +diff -urN gpc-20060325/p/doc/info/gpc-hr.info gpc-20070904/p/doc/info/gpc-hr.info +--- gpc-20060325/p/doc/info/gpc-hr.info 2006-03-25 03:25:21.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpc-hr.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-This is ../../gcc-4.0.2/gcc/p/doc/info/gpc-hr.info, produced by ++This is ../../gcc-3.4.6/gcc/p/doc/info/gpc-hr.info, produced by + makeinfo version 4.7 from gpc.texi. + + INFO-DIR-SECTION GNU programski alati +@@ -43,7 +43,7 @@ + Ovaj priruènik dokumentira kako se pokreæe, instalira i odr¾ava GNU + Pascal Compiler (GPC), kao i njegove nove znaèajke i eventualne + nekompatibilnosti, te kako prijavljivati bugove. Odgovara GPC-u +-20060325 (GCC 2.8.1, 2.95.x, 3.2.x, 3.3.x or 3.4.x). ++20070904 (GCC 2.8.1, 2.95.x, 3.2.x, 3.3.x or 3.4.x). + + * Menu: + +@@ -574,6 +574,19 @@ + to minor problems with old code, but we suppose they're rare and easy + to overcome. Backward-incompatible changes are marked with `(@)'. + ++ * support building libgpc as Mach shared library ++ ++ * `GPC_Initialize' and `GPC_Finalize' available as user routines (to ++ help building shared libraries) ++ ++ * better warnings for unexpected results of string comparisons ++ ++ * handle `volatile' attribute on types ++ ++ * allow `asm' in any dialect (if the `asm' keyword is enabled) ++ ++ * support for gcc-4.1.x ++ + * preliminary support for gcc-4.0.x + + * handle named exit from a method +@@ -7741,7 +7754,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -7762,7 +7775,7 @@ + General Public License. } + + {$gnu-pascal,I-} +- {$if __GPC_RELEASE__ <> 20060325} ++ {$if __GPC_RELEASE__ <> 20070904} + {$error + Trying to compile gpc.pas with a non-matching GPC version is likely + to cause problems. +@@ -8251,32 +8264,35 @@ + function LoCaseStr (const s: String) = Result: TString; + attribute (name = '_p_LoCaseStr'); external; + +- function StrEqualCase (const s1, s2: String): Boolean; attribute +- (name = '_p_StrEqualCase'); external; ++ function StrEqualCase (const s1: String; const s2: String): ++ Boolean; attribute (name = '_p_StrEqualCase'); external; + +- function Pos (const SubString, s: String): Integer; +- attribute (name = '_p_Pos'); external; ++ function Pos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_Pos'); external; + function PosChar (const ch: Char; const s: String): + Integer; attribute (name = '_p_PosChar'); external; +- function LastPos (const SubString, s: String): Integer; +- attribute (name = '_p_LastPos'); external; +- function PosCase (const SubString, s: String): Integer; +- attribute (name = '_p_PosCase'); external; +- function LastPosCase (const SubString, s: String): Integer; +- attribute (name = '_p_LastPosCase'); external; ++ function LastPos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPos'); external; ++ function PosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_PosCase'); external; ++ function LastPosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPosCase'); external; + function CharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_CharPos'); external; + function LastCharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_LastCharPos'); external; + +- function PosFrom (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFrom'); external; +- function LastPosTill (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTill'); external; +- function PosFromCase (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFromCase'); external; +- function LastPosTillCase (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTillCase'); ++ function PosFrom (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFrom'); ++ external; ++ function LastPosTill (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTill'); ++ external; ++ function PosFromCase (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFromCase'); ++ external; ++ function LastPosTillCase (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); + external; + function CharPosFrom (const Chars: CharSet; const s: String; + From: Integer): Integer; attribute (name = '_p_CharPosFrom'); +@@ -8285,14 +8301,14 @@ + Till: Integer): Integer; attribute (name = '_p_LastCharPosTill'); + external; + +- function IsPrefix (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefix'); external; +- function IsSuffix (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffix'); external; +- function IsPrefixCase (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefixCase'); external; +- function IsSuffixCase (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffixCase'); external; ++ function IsPrefix (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefix'); external; ++ function IsSuffix (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffix'); external; ++ function IsPrefixCase (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefixCase'); external; ++ function IsSuffixCase (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffixCase'); external; + + function CStringLength (Src: CString): SizeType; attribute + (inline, name = '_p_CStringLength'); external; +@@ -8447,8 +8463,8 @@ + + { Sets an environment variable with the name given in VarName to the + value Value. A previous value, if any, is overwritten. } +- procedure SetEnv (const VarName, Value: String); attribute (name +- = '_p_SetEnv'); external; ++ procedure SetEnv (const VarName: String; const Value: String); ++ attribute (name = '_p_SetEnv'); external; + + { Un-sets an environment variable with the name given in VarName. } + procedure UnSetEnv (const VarName: String); attribute (name +@@ -8524,6 +8540,10 @@ + RTSErrorFileName: PString; attribute (name = '_p_ErrorFileName'); + external; + ++ { Finalize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. } ++ procedure GPC_Finalize; ++ attribute (name = '_p_finalize'); external; + function GetErrorMessage (n: Integer): CString; + attribute (name = '_p_GetErrorMessage'); external; + procedure RuntimeError (n: Integer); attribute +@@ -9219,17 +9239,17 @@ + otherwise returns an empty string. If aFileName already contains + an element of DirSeparators, returns Slash2OSDirSeparator + (aFileName) if it exists. } +- function FSearch (const aFileName, DirList: String): TString; +- attribute (name = '_p_FSearch'); external; ++ function FSearch (const aFileName: String; const DirList: String): ++ TString; attribute (name = '_p_FSearch'); external; + + { Like FSearch, but only find executable files. Under Dos, if not + found, the function tries appending '.com', '.exe', '.bat' and + `.cmd' (the last one only if $COMSPEC points to a `cmd.exe'), so + you don't have to specify these extensions in aFileName (and with + respect to portability, it might be preferable not to do so). } +- function FSearchExecutable (const aFileName, DirList: String) = +- Result: TString; attribute (name = '_p_FSearchExecutable'); +- external; ++ function FSearchExecutable (const aFileName: String; const DirList: ++ String) = Result: TString; attribute (name ++ = '_p_FSearchExecutable'); external; + + { Replaces all occurrences of `$FOO' and `~' in s by the value of + the environment variables FOO or HOME, respectively. If a variable +@@ -9273,8 +9293,9 @@ + + { Splits a file name into directory, name and extension. Each of + Dir, BaseName and Ext may be Null. } +- procedure FSplit (const Path: String; var Dir, BaseName, Ext: +- String); attribute (name = '_p_FSplit'); external; ++ procedure FSplit (const Path: String; var Dir: String; var BaseName: ++ String; var Ext: String); attribute (name = '_p_FSplit'); ++ external; + + { Functions that extract one or two of the parts from FSplit. + DirFromPath returns DirSelf + DirSeparator if the path contains no +@@ -9312,9 +9333,9 @@ + + { Returns the first occurence of SubString in s that is not quoted + at the beginning, or 0 if no such occurence exists. } +- function FindNonQuotedStr (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); +- external; ++ function FindNonQuotedStr (const SubString: String; const s: ++ String; From: Integer): Integer; attribute (name ++ = '_p_FindNonQuotedStr'); external; + + { Does a string contain non-quoted wildcard characters? } + function HasWildCards (const s: String): Boolean; attribute (name +@@ -9348,12 +9369,13 @@ + = '_p_DisposePPStrings'); external; + + { Tests if a file name matches a shell wildcard pattern (?, *, []) } +- function FileNameMatch (const Pattern, FileName: String): Boolean; +- attribute (name = '_p_FileNameMatch'); external; ++ function FileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_FileNameMatch'); external; + + { FileNameMatch with BraceExpand } +- function MultiFileNameMatch (const Pattern, FileName: String): +- Boolean; attribute (name = '_p_MultiFileNameMatch'); external; ++ function MultiFileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_MultiFileNameMatch'); ++ external; + + { File name globbing } + { GlobInit is implied by Glob and MultiGlob, not by GlobOn and +@@ -9489,9 +9511,9 @@ + HOME is not. However, it is easy for users to set it if they want + their config files in a certain directory rather than with the + executables. } +- function ConfigFileName (const Prefix, BaseName: String; Global: +- Boolean): TString; attribute (name = '_p_ConfigFileName'); +- external; ++ function ConfigFileName (const Prefix: String; const BaseName: ++ String; Global: Boolean): TString; attribute (name ++ = '_p_ConfigFileName'); external; + + { Returns a directory name suitable for global, machine-independent + data. The function garantees that the name returned ends with a +@@ -9512,8 +9534,9 @@ + + About the symbols used above, and the two possibilities under Dos, + see the comments for ConfigFileName. } +- function DataDirectoryName (const Prefix, BaseName: String): +- TString; attribute (name = '_p_DataDirectoryName'); external; ++ function DataDirectoryName (const Prefix: String; const BaseName: ++ String): TString; attribute (name = '_p_DataDirectoryName'); ++ external; + + { Executes a command line. Reports execution errors via the IOResult + mechanism and returns the exit status of the executed program. +@@ -10066,6 +10089,17 @@ + + { Initialization, from init.pas } + ++ { Initialize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. ++ ArgumentCount, Arguments are argc and argv in C; StartEnvironment ++ is the environment variable pointer, and can be nil if other ways ++ to obtain the environment are available. Options can be 0 or a ++ combination of ro_* flags as defined in rts/constants.def. } ++ procedure GPC_Initialize (ArgumentCount: CInteger; ++ Arguments, StartEnvironment: PCStrings; ++ Options: CInteger); ++ attribute (name = '_p_initialize'); external; ++ + var + InitProc: ^procedure; attribute (name = '_p_InitProc'); external; + +@@ -10316,7 +10350,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11038,7 +11072,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11248,7 +11282,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11349,7 +11383,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11490,7 +11524,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12128,7 +12162,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12357,7 +12391,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12457,7 +12491,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -12656,7 +12690,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -12734,7 +12768,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12815,7 +12849,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13040,7 +13074,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13123,7 +13157,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13312,7 +13346,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13478,7 +13512,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13553,7 +13587,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13904,7 +13938,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14208,7 +14242,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14306,7 +14340,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14369,7 +14403,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14468,7 +14502,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -16427,6 +16461,7 @@ + * Read:: + * ReadLn:: + * ReadStr:: ++* ReadString:: + * Real:: + * record:: + * Release:: +@@ -16475,6 +16510,7 @@ + * Str:: + * String:: + * String2CString:: ++* StringOf:: + * SubStr:: + * Succ:: + * Text:: +@@ -25301,9 +25337,12 @@ + object type and can be accessed via `TypeOf'. + + `Size' contains the size of the object type, `NegatedSize' contains +-the size negated (for runtime checks). `Parent' contains a pointer to +-the parent type's VMT (or nil if the type has no parent). `Name' points +-to a string containing the type's name. ++the size negated (for optional runtime checks). `Parent' contains a ++pointer to the parent type's VMT (or nil if the type has no parent). ++`Name' points to a string containing the type's name. ++ ++ For abstract object types, `Size' contains 0 and `NegatedSize' ++contains -1, so they will always fail the runtime check. + + Conforming to + ------------- +@@ -26157,7 +26196,7 @@ + -------- + +  +-File: gpc-hr.info, Node: ReadStr, Next: Real, Prev: ReadLn, Up: Reference ++File: gpc-hr.info, Node: ReadStr, Next: ReadString, Prev: ReadLn, Up: Reference + + ReadStr + ======= +@@ -26184,7 +26223,28 @@ + -------- + +  +-File: gpc-hr.info, Node: Real, Next: record, Prev: ReadStr, Up: Reference ++File: gpc-hr.info, Node: ReadString, Next: Real, Prev: ReadStr, Up: Reference ++ ++ReadString ++========== ++ ++Description ++----------- ++ ++`ReadString' is an alternative name for `ReadStr' ++ ++Conforming to ++------------- ++ ++`ReadString' is a Mac Pascal extension. ++ ++See also ++-------- ++ ++*Note ReadStr:: ++ ++ ++File: gpc-hr.info, Node: Real, Next: record, Prev: ReadString, Up: Reference + + Real + ==== +@@ -28096,7 +28156,7 @@ + -------- + +  +-File: gpc-hr.info, Node: String2CString, Next: SubStr, Prev: String, Up: Reference ++File: gpc-hr.info, Node: String2CString, Next: StringOf, Prev: String, Up: Reference + + String2CString + ============== +@@ -28123,7 +28183,43 @@ + -------- + +  +-File: gpc-hr.info, Node: SubStr, Next: Succ, Prev: String2CString, Up: Reference ++File: gpc-hr.info, Node: StringOf, Next: SubStr, Prev: String2CString, Up: Reference ++ ++StringOf ++======== ++ ++Synopsis ++-------- ++ ++ function StringOf (VALUES_AND_FORMAT_SPECIFICATIONS): String; ++ ++Description ++----------- ++ ++`StringOf' prints its arguments to an internal buffer and returns ++resulting string. Value and format specifications are handled exactly ++the same as in `Write' or `WriteStr'. ++ ++Conforming to ++------------- ++ ++`StringOf' is a Mac Pascal extension. ++ ++Example ++------- ++ ++ program StringOfDemo; ++ begin ++ writeln(StringOf('2 * 2 = ', 2 * 2)) ++ end. ++ ++See also ++-------- ++ ++*Note Write:: *Note WriteStr::. ++ ++ ++File: gpc-hr.info, Node: SubStr, Next: Succ, Prev: StringOf, Up: Reference + + SubStr + ====== +@@ -29826,7 +29922,7 @@ + as (OP, BD, MP) (*note as::) + object type membership test and conversion + +-asm (BP, BD) (*note asm::) ++asm (BP, BD, MP) (*note asm::) + GNU style inline assembler code + + asmname (GPC) (*note asmname::) +@@ -30588,7 +30684,7 @@ + list can be found at `http://www.gnu-pascal.de/crystal/gpc/en/'. + + The list changes regularly. The present version refers to the +-current GPC snapshot, 20060325. ++current GPC snapshot, 20070904. + + This list is part of the GNU Pascal Manual, included in GPC + distributions and snapshots. You can always browse the most current +@@ -30889,6 +30985,39 @@ + you can check if some problem has already been solved in a recent + release or developer version. For new features, see *Note News::. + ++ * 20070903: Prevent multiple evaluation of some string expressions ++ (roland2.pas). ++ ++ * 20070903: Correct range checking for `Succ' and `Pred' applied to ++ enumerations (`fsc2[24].pas') on 64-bit machines. ++ ++ * 20070903: Check that procedures assigned to constant variables are ++ not nested (did not work with 4.x backends) (nicola4c.pas). ++ ++ * 20070903: On 64-bit machines range check for small unsigned ++ subranges failed to work (range2.pas and chuck6.pas). ++ ++ * 20070902: Allow copy on function values (copy1.pas). ++ ++ * 20070831: Do not ICE on break outside loop (affected 4.x backends) ++ (russ5[ab].pas). ++ ++ * 20070830: Fix crash for some initializers (affected 4.x backends) ++ (igor2.pas). ++ ++ * 20060830: Allow jumps into blocks when `-no-iso-goto-restrictions' ++ is in force (goto9[cd].pas). ++ ++ * 20060722: Some initializers with nested strings were rejected ++ (velo1.pas). ++ ++ * 20060519: Correct some build problems. ++ ++ * 20060505: Local `R-' option affected rest of the file ++ (gale12[a-h].pas). ++ ++ * 20060424: Handle empty string in InternalStringOf (stro2.pas). ++ + * 20060304: Do not allow passing strings to parameters of type array + of char subrange (avoids passing out of range values). + +@@ -32763,295 +32892,666 @@ + Appendix A GNU GENERAL PUBLIC LICENSE + ************************************* + +- Version 2, June 1991 ++ Version 3, 29 June 2007 + +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. ++ Everyone is permitted to copy and distribute verbatim copies of this ++ license document, but changing it is not allowed. + +-GPL Preamble +-============ ++Preamble ++======== + +-The licenses for most software are designed to take away your freedom +-to share and change it. By contrast, the GNU General Public License is +-intended to guarantee your freedom to share and change free software - +-to make sure the software is free for all its users. This General +-Public License applies to most of the Free Software Foundation's +-software and to any other program whose authors commit to using it. +-(Some other Free Software Foundation software is covered by the GNU +-Lesser General Public License instead.) You can apply it to your +-programs, too. ++The GNU General Public License is a free, copyleft license for software ++and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains ++free software for all its users. We, the Free Software Foundation, use ++the GNU General Public License for most of our software; it applies ++also to any other work released this way by its authors. You can apply ++it to your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it in +-new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you ++have certain responsibilities if you distribute copies of the software, ++or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, +-and (2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, receive ++or can get the source code. And you must show them these terms so they ++know their rights. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the ++manufacturer can do so. This is fundamentally incompatible with the ++aim of protecting users' freedom to change the software. The ++systematic pattern of such abuse occurs in the area of products for ++individuals to use, which is precisely where it is most unacceptable. ++Therefore, we have designed this version of the GPL to prohibit the ++practice for those products. If such problems arise substantially in ++other domains, we stand ready to extend this provision to those domains ++in future versions of the GPL, as needed to protect the freedom of ++users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- 0. This License applies to any program or other work which contains a +- notice placed by the copyright holder saying it may be distributed +- under the terms of this General Public License. The "Program", +- below, refers to any such program or work, and a "work based on +- the Program" means either the Program or any derivative work under +- copyright law: that is to say, a work containing the Program or a +- portion of it, either verbatim or with modifications and/or +- translated into another language. (Hereinafter, translation is +- included without limitation in the term "modification".) Each +- licensee is addressed as "you". +- +- Activities other than copying, distribution and modification are +- not covered by this License; they are outside its scope. The act +- of running the Program is not restricted, and the output from the +- Program is covered only if its contents constitute a work based on +- the Program (independent of having been made by running the +- Program). Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +- source code as you receive it, in any medium, provided that you +- conspicuously and appropriately publish on each copy an appropriate +- copyright notice and disclaimer of warranty; keep intact all the +- notices that refer to this License and to the absence of any +- warranty; and give any other recipients of the Program a copy of +- this License along with the Program. +- +- You may charge a fee for the physical act of transferring a copy, +- and you may at your option offer warranty protection in exchange +- for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +- of it, thus forming a work based on the Program, and copy and +- distribute such modifications or work under the terms of Section 1 +- above, provided that you also meet all of these conditions: +- +- a. You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b. You must cause any work that you distribute or publish, that +- in whole or in part contains or is derived from the Program +- or any part thereof, to be licensed as a whole at no charge +- to all third parties under the terms of this License. +- +- c. If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display +- an announcement including an appropriate copyright notice and +- a notice that there is no warranty (or else, saying that you +- provide a warranty) and that users may redistribute the +- program under these conditions, and telling the user how to +- view a copy of this License. (Exception: if the Program +- itself is interactive but does not normally print such an +- announcement, your work based on the Program is not required +- to print an announcement.) +- +- These requirements apply to the modified work as a whole. If +- identifiable sections of that work are not derived from the +- Program, and can be reasonably considered independent and separate +- works in themselves, then this License, and its terms, do not +- apply to those sections when you distribute them as separate +- works. But when you distribute the same sections as part of a +- whole which is a work based on the Program, the distribution of +- the whole must be on the terms of this License, whose permissions +- for other licensees extend to the entire whole, and thus to each +- and every part regardless of who wrote it. +- +- Thus, it is not the intent of this section to claim rights or +- contest your rights to work written entirely by you; rather, the +- intent is to exercise the right to control the distribution of +- derivative or collective works based on the Program. ++TERMS AND CONDITIONS ++==================== + +- In addition, mere aggregation of another work not based on the +- Program with the Program (or with a work based on the Program) on +- a volume of a storage or distribution medium does not bring the +- other work under the scope of this License. ++ 0. Definitions. + +- 3. You may copy and distribute the Program (or a work based on it, +- under Section 2) in object code or executable form under the terms +- of Sections 1 and 2 above provided that you also do one of the +- following: +- +- a. Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of +- Sections 1 and 2 above on a medium customarily used for +- software interchange; or, +- +- b. Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a +- medium customarily used for software interchange; or, +- +- c. Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with +- such an offer, in accord with Subsection b above.) +- +- The source code for a work means the preferred form of the work for +- making modifications to it. For an executable work, complete +- source code means all the source code for all modules it contains, +- plus any associated interface definition files, plus the scripts +- used to control compilation and installation of the executable. +- However, as a special exception, the source code distributed need +- not include anything that is normally distributed (in either +- source or binary form) with the major components (compiler, +- kernel, and so on) of the operating system on which the executable +- runs, unless that component itself accompanies the executable. +- +- If distribution of executable or object code is made by offering +- access to copy from a designated place, then offering equivalent +- access to copy the source code from the same place counts as +- distribution of the source code, even though third parties are not +- compelled to copy the source along with the object code. ++ "This License" refers to version 3 of the GNU General Public ++ License. + +- 4. You may not copy, modify, sublicense, or distribute the Program +- except as expressly provided under this License. Any attempt +- otherwise to copy, modify, sublicense or distribute the Program is +- void, and will automatically terminate your rights under this +- License. However, parties who have received copies, or rights, +- from you under this License will not have their licenses +- terminated so long as such parties remain in full compliance. ++ "Copyright" also means copyright-like laws that apply to other ++ kinds of works, such as semiconductor masks. + +- 5. You are not required to accept this License, since you have not +- signed it. However, nothing else grants you permission to modify +- or distribute the Program or its derivative works. These actions +- are prohibited by law if you do not accept this License. +- Therefore, by modifying or distributing the Program (or any work +- based on the Program), you indicate your acceptance of this +- License to do so, and all its terms and conditions for copying, +- distributing or modifying the Program or works based on it. ++ "The Program" refers to any copyrightable work licensed under this ++ License. Each licensee is addressed as "you". "Licensees" and ++ "recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the ++ work in a fashion requiring copyright permission, other than the ++ making of an exact copy. The resulting work is called a "modified ++ version" of the earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work ++ based on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++ permission, would make you directly or secondarily liable for ++ infringement under applicable copyright law, except executing it ++ on a computer or modifying a private copy. Propagation includes ++ copying, distribution (with or without modification), making ++ available to the public, and in some countries other activities as ++ well. ++ ++ To "convey" a work means any kind of propagation that enables other ++ parties to make or receive copies. Mere interaction with a user ++ through a computer network, with no transfer of a copy, is not ++ conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++ to the extent that it includes a convenient and prominently visible ++ feature that (1) displays an appropriate copyright notice, and (2) ++ tells the user that there is no warranty for the work (except to ++ the extent that warranties are provided), that licensees may ++ convey the work under this License, and how to view a copy of this ++ License. If the interface presents a list of user commands or ++ options, such as a menu, a prominent item in the list meets this ++ criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++ for making modifications to it. "Object code" means any ++ non-source form of a work. ++ ++ A "Standard Interface" means an interface that either is an ++ official standard defined by a recognized standards body, or, in ++ the case of interfaces specified for a particular programming ++ language, one that is widely used among developers working in that ++ language. ++ ++ The "System Libraries" of an executable work include anything, ++ other than the work as a whole, that (a) is included in the normal ++ form of packaging a Major Component, but which is not part of that ++ Major Component, and (b) serves only to enable use of the work ++ with that Major Component, or to implement a Standard Interface ++ for which an implementation is available to the public in source ++ code form. A "Major Component", in this context, means a major ++ essential component (kernel, window system, and so on) of the ++ specific operating system (if any) on which the executable work ++ runs, or a compiler used to produce the work, or an object code ++ interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++ the source code needed to generate, install, and (for an executable ++ work) run the object code and to modify the work, including ++ scripts to control those activities. However, it does not include ++ the work's System Libraries, or general-purpose tools or generally ++ available free programs which are used unmodified in performing ++ those activities but which are not part of the work. For example, ++ Corresponding Source includes interface definition files ++ associated with source files for the work, and the source code for ++ shared libraries and dynamically linked subprograms that the work ++ is specifically designed to require, such as by intimate data ++ communication or control flow between those subprograms and other ++ parts of the work. ++ ++ The Corresponding Source need not include anything that users can ++ regenerate automatically from other parts of the Corresponding ++ Source. ++ ++ The Corresponding Source for a work in source code form is that ++ same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++ copyright on the Program, and are irrevocable provided the stated ++ conditions are met. This License explicitly affirms your unlimited ++ permission to run the unmodified Program. The output from running ++ a covered work is covered by this License only if the output, ++ given its content, constitutes a covered work. This License ++ acknowledges your rights of fair use or other equivalent, as ++ provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++ convey, without conditions so long as your license otherwise ++ remains in force. You may convey covered works to others for the ++ sole purpose of having them make modifications exclusively for ++ you, or provide you with facilities for running those works, ++ provided that you comply with the terms of this License in ++ conveying all material for which you do not control copyright. ++ Those thus making or running the covered works for you must do so ++ exclusively on your behalf, under your direction and control, on ++ terms that prohibit them from making any copies of your ++ copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++ the conditions stated below. Sublicensing is not allowed; section ++ 10 makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++ measure under any applicable law fulfilling obligations under ++ article 11 of the WIPO copyright treaty adopted on 20 December ++ 1996, or similar laws prohibiting or restricting circumvention of ++ such measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++ circumvention of technological measures to the extent such ++ circumvention is effected by exercising rights under this License ++ with respect to the covered work, and you disclaim any intention ++ to limit operation or modification of the work as a means of ++ enforcing, against the work's users, your or third parties' legal ++ rights to forbid circumvention of technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey verbatim copies of the Program's source code as you ++ receive it, in any medium, provided that you conspicuously and ++ appropriately publish on each copy an appropriate copyright notice; ++ keep intact all notices stating that this License and any ++ non-permissive terms added in accord with section 7 apply to the ++ code; keep intact all notices of the absence of any warranty; and ++ give all recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++ and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++ produce it from the Program, in the form of source code under the ++ terms of section 4, provided that you also meet all of these ++ conditions: ++ ++ a. The work must carry prominent notices stating that you ++ modified it, and giving a relevant date. ++ ++ b. The work must carry prominent notices stating that it is ++ released under this License and any conditions added under ++ section 7. This requirement modifies the requirement in ++ section 4 to "keep intact all notices". ++ ++ c. You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable ++ section 7 additional terms, to the whole of the work, and all ++ its parts, regardless of how they are packaged. This License ++ gives no permission to license the work in any other way, but ++ it does not invalidate such permission if you have separately ++ received it. ++ ++ d. If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has ++ interactive interfaces that do not display Appropriate Legal ++ Notices, your work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++ works, which are not by their nature extensions of the covered ++ work, and which are not combined with it such as to form a larger ++ program, in or on a volume of a storage or distribution medium, is ++ called an "aggregate" if the compilation and its resulting ++ copyright are not used to limit the access or legal rights of the ++ compilation's users beyond what the individual works permit. ++ Inclusion of a covered work in an aggregate does not cause this ++ License to apply to the other parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++ of sections 4 and 5, provided that you also convey the ++ machine-readable Corresponding Source under the terms of this ++ License, in one of these ways: ++ ++ a. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for ++ as long as you offer spare parts or customer support for that ++ product model, to give anyone who possesses the object code ++ either (1) a copy of the Corresponding Source for all the ++ software in the product that is covered by this License, on a ++ durable physical medium customarily used for software ++ interchange, for a price no more than your reasonable cost of ++ physically performing this conveying of source, or (2) access ++ to copy the Corresponding Source from a network server at no ++ charge. ++ ++ c. Convey individual copies of the object code with a copy of ++ the written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, ++ and only if you received the object code with such an offer, ++ in accord with subsection 6b. ++ ++ d. Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access ++ to the Corresponding Source in the same way through the same ++ place at no further charge. You need not require recipients ++ to copy the Corresponding Source along with the object code. ++ If the place to copy the object code is a network server, the ++ Corresponding Source may be on a different server (operated ++ by you or a third party) that supports equivalent copying ++ facilities, provided you maintain clear directions next to ++ the object code saying where to find the Corresponding Source. ++ Regardless of what server hosts the Corresponding Source, you ++ remain obligated to ensure that it is available for as long ++ as needed to satisfy these requirements. ++ ++ e. Convey the object code using peer-to-peer transmission, ++ provided you inform other peers where the object code and ++ Corresponding Source of the work are being offered to the ++ general public at no charge under subsection 6d. ++ ++ ++ A separable portion of the object code, whose source code is ++ excluded from the Corresponding Source as a System Library, need ++ not be included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means ++ any tangible personal property which is normally used for personal, ++ family, or household purposes, or (2) anything designed or sold for ++ incorporation into a dwelling. In determining whether a product ++ is a consumer product, doubtful cases shall be resolved in favor of ++ coverage. For a particular product received by a particular user, ++ "normally used" refers to a typical or common use of that class of ++ product, regardless of the status of the particular user or of the ++ way in which the particular user actually uses, or expects or is ++ expected to use, the product. A product is a consumer product ++ regardless of whether the product has substantial commercial, ++ industrial or non-consumer uses, unless such uses represent the ++ only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++ procedures, authorization keys, or other information required to ++ install and execute modified versions of a covered work in that ++ User Product from a modified version of its Corresponding Source. ++ The information must suffice to ensure that the continued ++ functioning of the modified object code is in no case prevented or ++ interfered with solely because modification has been made. ++ ++ If you convey an object code work under this section in, or with, ++ or specifically for use in, a User Product, and the conveying ++ occurs as part of a transaction in which the right of possession ++ and use of the User Product is transferred to the recipient in ++ perpetuity or for a fixed term (regardless of how the transaction ++ is characterized), the Corresponding Source conveyed under this ++ section must be accompanied by the Installation Information. But ++ this requirement does not apply if neither you nor any third party ++ retains the ability to install modified object code on the User ++ Product (for example, the work has been installed in ROM). ++ ++ The requirement to provide Installation Information does not ++ include a requirement to continue to provide support service, ++ warranty, or updates for a work that has been modified or ++ installed by the recipient, or for the User Product in which it ++ has been modified or installed. Access to a network may be denied ++ when the modification itself materially and adversely affects the ++ operation of the network or violates the rules and protocols for ++ communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information ++ provided, in accord with this section must be in a format that is ++ publicly documented (and with an implementation available to the ++ public in source code form), and must require no special password ++ or key for unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of ++ this License by making exceptions from one or more of its ++ conditions. Additional permissions that are applicable to the ++ entire Program shall be treated as though they were included in ++ this License, to the extent that they are valid under applicable ++ law. If additional permissions apply only to part of the Program, ++ that part may be used separately under those permissions, but the ++ entire Program remains governed by this License without regard to ++ the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++ remove any additional permissions from that copy, or from any part ++ of it. (Additional permissions may be written to require their own ++ removal in certain cases when you modify the work.) You may place ++ additional permissions on material, added by you to a covered work, ++ for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material ++ you add to a covered work, you may (if authorized by the copyright ++ holders of that material) supplement the terms of this License ++ with terms: ++ ++ a. Disclaiming warranty or limiting liability differently from ++ the terms of sections 15 and 16 of this License; or ++ ++ b. Requiring preservation of specified reasonable legal notices ++ or author attributions in that material or in the Appropriate ++ Legal Notices displayed by works containing it; or ++ ++ c. Prohibiting misrepresentation of the origin of that material, ++ or requiring that modified versions of such material be ++ marked in reasonable ways as different from the original ++ version; or ++ ++ d. Limiting the use for publicity purposes of names of licensors ++ or authors of the material; or ++ ++ e. Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f. Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified ++ versions of it) with contractual assumptions of liability to ++ the recipient, for any liability that these contractual ++ assumptions directly impose on those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++ restrictions" within the meaning of section 10. If the Program as ++ you received it, or any part of it, contains a notice stating that ++ it is governed by this License along with a term that is a further ++ restriction, you may remove that term. If a license document ++ contains a further restriction but permits relicensing or ++ conveying under this License, you may add to a covered work ++ material governed by the terms of that license document, provided ++ that the further restriction does not survive such relicensing or ++ conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++ must place, in the relevant source files, a statement of the ++ additional terms that apply to those files, or a notice indicating ++ where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in ++ the form of a separately written license, or stated as exceptions; ++ the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++ provided under this License. Any attempt otherwise to propagate or ++ modify it is void, and will automatically terminate your rights ++ under this License (including any patent licenses granted under ++ the third paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++ license from a particular copyright holder is reinstated (a) ++ provisionally, unless and until the copyright holder explicitly ++ and finally terminates your license, and (b) permanently, if the ++ copyright holder fails to notify you of the violation by some ++ reasonable means prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++ reinstated permanently if the copyright holder notifies you of the ++ violation by some reasonable means, this is the first time you have ++ received notice of violation of this License (for any work) from ++ that copyright holder, and you cure the violation prior to 30 days ++ after your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate ++ the licenses of parties who have received copies or rights from ++ you under this License. If your rights have been terminated and ++ not permanently reinstated, you do not qualify to receive new ++ licenses for the same material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++ run a copy of the Program. Ancillary propagation of a covered work ++ occurring solely as a consequence of using peer-to-peer ++ transmission to receive a copy likewise does not require ++ acceptance. However, nothing other than this License grants you ++ permission to propagate or modify any covered work. These actions ++ infringe copyright if you do not accept this License. Therefore, ++ by modifying or propagating a covered work, you indicate your ++ acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++ receives a license from the original licensors, to run, modify and ++ propagate that work, subject to this License. You are not ++ responsible for enforcing compliance by third parties with this ++ License. ++ ++ An "entity transaction" is a transaction transferring control of an ++ organization, or substantially all assets of one, or subdividing an ++ organization, or merging organizations. If propagation of a ++ covered work results from an entity transaction, each party to that ++ transaction who receives a copy of the work also receives whatever ++ licenses to the work the party's predecessor in interest had or ++ could give under the previous paragraph, plus a right to ++ possession of the Corresponding Source of the work from the ++ predecessor in interest, if the predecessor has it or can get it ++ with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++ rights granted or affirmed under this License. For example, you ++ may not impose a license fee, royalty, or other charge for ++ exercise of rights granted under this License, and you may not ++ initiate litigation (including a cross-claim or counterclaim in a ++ lawsuit) alleging that any patent claim is infringed by making, ++ using, selling, offering for sale, or importing the Program or any ++ portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++ License of the Program or a work on which the Program is based. ++ The work thus licensed is called the contributor's "contributor ++ version". ++ ++ A contributor's "essential patent claims" are all patent claims ++ owned or controlled by the contributor, whether already acquired or ++ hereafter acquired, that would be infringed by some manner, ++ permitted by this License, of making, using, or selling its ++ contributor version, but do not include claims that would be ++ infringed only as a consequence of further modification of the ++ contributor version. For purposes of this definition, "control" ++ includes the right to grant patent sublicenses in a manner ++ consistent with the requirements of this License. ++ ++ Each contributor grants you a non-exclusive, worldwide, ++ royalty-free patent license under the contributor's essential ++ patent claims, to make, use, sell, offer for sale, import and ++ otherwise run, modify and propagate the contents of its ++ contributor version. ++ ++ In the following three paragraphs, a "patent license" is any ++ express agreement or commitment, however denominated, not to ++ enforce a patent (such as an express permission to practice a ++ patent or covenant not to sue for patent infringement). To ++ "grant" such a patent license to a party means to make such an ++ agreement or commitment not to enforce a patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent ++ license, and the Corresponding Source of the work is not available ++ for anyone to copy, free of charge and under the terms of this ++ License, through a publicly available network server or other ++ readily accessible means, then you must either (1) cause the ++ Corresponding Source to be so available, or (2) arrange to deprive ++ yourself of the benefit of the patent license for this particular ++ work, or (3) arrange, in a manner consistent with the requirements ++ of this License, to extend the patent license to downstream ++ recipients. "Knowingly relying" means you have actual knowledge ++ that, but for the patent license, your conveying the covered work ++ in a country, or your recipient's use of the covered work in a ++ country, would infringe one or more identifiable patents in that ++ country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++ arrangement, you convey, or propagate by procuring conveyance of, a ++ covered work, and grant a patent license to some of the parties ++ receiving the covered work authorizing them to use, propagate, ++ modify or convey a specific copy of the covered work, then the ++ patent license you grant is automatically extended to all ++ recipients of the covered work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++ the scope of its coverage, prohibits the exercise of, or is ++ conditioned on the non-exercise of one or more of the rights that ++ are specifically granted under this License. You may not convey a ++ covered work if you are a party to an arrangement with a third ++ party that is in the business of distributing software, under ++ which you make payment to the third party based on the extent of ++ your activity of conveying the work, and under which the third ++ party grants, to any of the parties who would receive the covered ++ work from you, a discriminatory patent license (a) in connection ++ with copies of the covered work conveyed by you (or copies made ++ from those copies), or (b) primarily for and in connection with ++ specific products or compilations that contain the covered work, ++ unless you entered into that arrangement, or that patent license ++ was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++ any implied license or other defenses to infringement that may ++ otherwise be available to you under applicable patent law. + +- 6. Each time you redistribute the Program (or any work based on the +- Program), the recipient automatically receives a license from the +- original licensor to copy, distribute or modify the Program +- subject to these terms and conditions. You may not impose any +- further restrictions on the recipients' exercise of the rights +- granted herein. You are not responsible for enforcing compliance +- by third parties to this License. ++ 12. No Surrender of Others' Freedom. + +- 7. If, as a consequence of a court judgment or allegation of patent +- infringement or for any other reason (not limited to patent +- issues), conditions are imposed on you (whether by court order, ++ If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this +- License. If you cannot distribute so as to satisfy simultaneously +- your obligations under this License and any other pertinent +- obligations, then as a consequence you may not distribute the +- Program at all. For example, if a patent license would not permit +- royalty-free redistribution of the Program by all those who +- receive copies directly or indirectly through you, then the only +- way you could satisfy both it and this License would be to refrain +- entirely from distribution of the Program. +- +- If any portion of this section is held invalid or unenforceable +- under any particular circumstance, the balance of the section is +- intended to apply and the section as a whole is intended to apply +- in other circumstances. +- +- It is not the purpose of this section to induce you to infringe any +- patents or other property right claims or to contest validity of +- any such claims; this section has the sole purpose of protecting +- the integrity of the free software distribution system, which is +- implemented by public license practices. Many people have made +- generous contributions to the wide range of software distributed +- through that system in reliance on consistent application of that +- system; it is up to the author/donor to decide if he or she is +- willing to distribute software through any other system and a +- licensee cannot impose that choice. +- +- This section is intended to make thoroughly clear what is believed +- to be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +- certain countries either by patents or by copyrighted interfaces, +- the original copyright holder who places the Program under this +- License may add an explicit geographical distribution limitation +- excluding those countries, so that distribution is permitted only +- in or among countries not thus excluded. In such case, this +- License incorporates the limitation as if written in the body of +- this License. +- +- 9. The Free Software Foundation may publish revised and/or new +- versions of the General Public License from time to time. Such +- new versions will be similar in spirit to the present version, but +- may differ in detail to address new problems or concerns. ++ License. If you cannot convey a covered work so as to satisfy ++ simultaneously your obligations under this License and any other ++ pertinent obligations, then as a consequence you may not convey it ++ at all. For example, if you agree to terms that obligate you to ++ collect a royalty for further conveying from those to whom you ++ convey the Program, the only way you could satisfy both those ++ terms and this License would be to refrain entirely from conveying ++ the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++ permission to link or combine any covered work with a work licensed ++ under version 3 of the GNU Affero General Public License into a ++ single combined work, and to convey the resulting work. The terms ++ of this License will continue to apply to the part which is the ++ covered work, but the special requirements of the GNU Affero ++ General Public License, section 13, concerning interaction through ++ a network will apply to the combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new ++ versions of the GNU General Public License from time to time. ++ Such new versions will be similar in spirit to the present ++ version, but may differ in detail to address new problems or ++ concerns. + + Each version is given a distinguishing version number. If the +- Program specifies a version number of this License which applies +- to it and "any later version", you have the option of following +- the terms and conditions either of that version or of any later +- version published by the Free Software Foundation. If the Program +- does not specify a version number of this License, you may choose ++ Program specifies that a certain numbered version of the GNU ++ General Public License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that numbered version or of any later version published by the ++ Free Software Foundation. If the Program does not specify a ++ version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + +- 10. If you wish to incorporate parts of the Program into other free +- programs whose distribution conditions are different, write to the +- author to ask for permission. For software which is copyrighted +- by the Free Software Foundation, write to the Free Software +- Foundation; we sometimes make exceptions for this. Our decision +- will be guided by the two goals of preserving the free status of +- all derivatives of our free software and of promoting the sharing +- and reuse of software generally. ++ If the Program specifies that a proxy can decide which future ++ versions of the GNU General Public License can be used, that ++ proxy's public statement of acceptance of a version permanently ++ authorizes you to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++ permissions. However, no additional obligations are imposed on any ++ author or copyright holder as a result of your choosing to follow a ++ later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE ++ COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" ++ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, ++ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE ++ RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. ++ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL ++ NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ++ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES ++ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU ++ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR ++ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE ++ THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA ++ BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD ++ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF ++ THE POSSIBILITY OF SUCH DAMAGES. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++ above cannot be given local legal effect according to their terms, ++ reviewing courts shall apply local law that most closely ++ approximates an absolute waiver of all civil liability in ++ connection with the Program, unless a warranty or assumption of ++ liability accompanies a copy of the Program in return for a fee. + +- NO WARRANTY +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO +- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE +- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT +- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE +- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY +- SERVICING, REPAIR OR CORRECTION. + +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY +- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE +- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU +- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY +- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN +- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ++END OF TERMS AND CONDITIONS ++=========================== + +- END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + ============================================= + +@@ -33062,59 +33562,52 @@ + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. ++state the exclusion of warranty; and each file should have at least the ++"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. +- Copyright (C) YEAR NAME OF AUTHOR ++ Copyright (C) YEAR NAME OF AUTHOR + +- This program is free software; you can redistribute it and/or modify ++ This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. ++ the Free Software Foundation, either version 3 of the License, or (at ++ your option) any later version. + +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT 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 +- along with this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ along with this program. If not, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper + mail. + +- If the program is interactive, make it output a short notice like +-this when it starts in an interactive mode: ++ If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: + +- Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +- type `show w'. ++ PROGRAM Copyright (C) YEAR NAME OF AUTHOR ++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +-appropriate parts of the General Public License. Of course, the +-commands you use may be called something other than `show w' and `show +-c'; they could even be mouse-clicks or menu items - whatever suits your +-program. ++appropriate parts of the General Public License. Of course, your ++program's commands might be different; for a GUI interface, you would ++use an "about box". + + You should also get your employer (if you work as a programmer) or +-your school, if any, to sign a "copyright disclaimer" for the program, +-if necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- SIGNATURE OF TY COON, 1 April 1989 +- Ty Coon, President of Vice ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. For more information on this, and how to apply and follow ++the GNU GPL, see `http://www.gnu.org/licenses/'. + +- This General Public License does not permit incorporating your ++ The GNU General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the +-GNU Lesser General Public License instead of this License. ++GNU Lesser General Public License instead of this License. But first, ++please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + +  + File: gpc-hr.info, Node: Library Copying, Next: Demo Copying, Prev: Copying, Up: Top +@@ -33658,7 +34151,7 @@ + + This demo program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +-published by the Free Software Foundation; either version 2, or (at ++published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This demo program is distributed in the hope that it will be useful, +@@ -35944,6 +36437,7 @@ + * Read: Read. (line 6) + * ReadLn: ReadLn. (line 6) + * ReadStr: ReadStr. (line 6) ++* ReadString: ReadString. (line 6) + * Real <1>: Real. (line 6) + * Real: Real Types. (line 6) + * record <1>: Keywords. (line 322) +@@ -36048,6 +36542,7 @@ + * String, Intrinsic, Data Types: String Types. (line 6) + * string, slice access: String Slice Access. (line 6) + * String2CString: String2CString. (line 6) ++* StringOf: StringOf. (line 6) + * Strings: Strings. (line 6) + * strings, operations: String Operations. (line 6) + * StringUtils: StringUtils. (line 6) +@@ -36176,591 +36671,593 @@ + Node: Dobrodo¹li3989 + Node: Naglasci9466 + Node: News22291 +-Node: FAQ37649 +-Node: GNU Pascal38459 +-Node: ©to i za¹to38896 +-Node: Trenutna verzija40836 +-Node: Kompatibilnost sa Turbo Pascalom41734 +-Node: Podr¾ane platforme42653 +-Node: Instaliranje GPC-a44067 +-Node: Dokumentacijske datoteke44970 +-Node: Komponente45656 +-Node: Debugger46395 +-Node: Libraries48488 +-Node: Darovane jedinice52899 +-Node: IDE53226 +-Node: GPC na DJGPP-u54583 +-Node: ©to je DJGPP55577 +-Node: DJGPP FAQ56117 +-Node: DJGPP download56598 +-Node: Instaliranje GPC-a na DJGPP57314 +-Node: DJGPP Info reader59384 +-Node: DJGPP DPMI server59746 +-Node: Asemblerska sintaksa60202 +-Node: DJGPP-specifièan kod61682 +-Node: Velièina stoga (stack)64121 +-Node: Znakovni nizovi u GPC-u65963 +-Node: String schema66658 +-Node: Nizovi u variant record-ima67697 +-Node: Bajt za duljinu69864 +-Node: Nizovi kao parametri po vrijednosti70689 +-Node: Kratki znakovni nizovi71585 +-Node: C znakovni nizovi72623 +-Node: Tra¾enje pomoæi74199 +-Node: FAQ "Razno"74924 +-Node: Suradnja na projektu75202 +-Node: GPC web poslu¾itelj75490 +-Node: O ovom FAQ-u75869 +-Node: Installation76666 +-Node: Download77210 +-Node: Binary Distributions82726 +-Node: Compiling GPC85357 +-Node: Compilation Notes95861 +-Node: MS-DOS with DJGPP96297 +-Node: MS-DOS or OS/2 with EMX97287 +-Node: MS Windows 95/98/NT97844 +-Node: Cross-Compilers98621 +-Node: Crossbuilding100034 +-Node: Invoking GPC100879 +-Node: GPC Command Line Options103645 +-Node: GPC Options121102 +-Node: Programming131198 +-Node: Source Structures132839 +-Node: The Program133949 +-Node: Label Declaration135534 +-Node: Constant Declaration135940 +-Node: Type Declaration139890 +-Node: Variable Declaration142691 +-Node: Subroutine Declaration144259 +-Node: The Procedure144546 +-Node: The Function145377 +-Node: The Operator146832 +-Node: Subroutine Parameter List Declaration147157 +-Node: Statements153110 +-Node: Assignment153547 +-Node: begin end Compound Statement154075 +-Node: if Statement154561 +-Node: case Statement155327 +-Node: for Statement157212 +-Node: while Statement159512 +-Node: repeat Statement160032 +-Node: asm Inline160580 +-Node: with Statement161036 +-Node: goto Statement161186 +-Node: Procedure Call161426 +-Node: The Declaring Statement161792 +-Node: Loop Control Statements162931 +-Node: Modules and Units163394 +-Node: Modules163715 +-Node: Units167639 +-Node: Data Types169838 +-Node: Type Definition170754 +-Node: Ordinal Types171271 +-Node: Integer Types172456 +-Node: Natural Integer Types173254 +-Node: Main Branch Integer Types174176 +-Node: Integer Types with Specified Size176366 +-Node: Integer Types and Compatibility177719 +-Node: Summary of Integer Types179230 +-Node: Real Types181951 +-Node: String Types183706 +-Node: Character Types184573 +-Node: Enumerated Types184877 +-Node: File Types185888 +-Node: Boolean (Intrinsic)186950 +-Node: Pointer (Intrinsic)187686 +-Node: Type Definition Possibilities188088 +-Node: Subrange Types188864 +-Node: Array Types190103 +-Node: Record Types191223 +-Node: Variant Records192678 +-Node: Schema Types193662 +-Node: Set Types200673 +-Node: Pointer Types201824 +-Node: Procedural Types203584 +-Node: Object Types206196 +-Node: Type Initializers206516 +-Node: Restricted Types208162 +-Node: Machine-dependencies in Types210346 +-Node: Endianness210663 +-Node: Alignment214275 +-Node: Operators214440 +-Node: Built-in Operators214783 +-Node: User-defined Operators215712 +-Node: Parameters217107 +-Node: Protected Parameters217506 +-Node: Conformant Arrays218297 +-Node: Open Arrays218589 +-Node: String Slice Access219368 +-Node: Pointer Arithmetics220691 +-Node: Type Casts221990 +-Node: OOP226305 +-Node: Compiler Directives231078 +-Node: Library Routines239008 +-Node: File Routines239610 +-Node: String Operations245027 +-Node: Accessing Command Line Arguments247645 +-Node: Memory Management Routines248481 +-Node: Operations for Integer and Ordinal Types249467 +-Node: Complex Number Operations250831 +-Node: Set Operations252889 +-Node: Date And Time Routines255171 +-Node: Other Languages255912 +-Node: Importing Libraries from Other Languages256841 +-Node: Exporting GPC Libraries to Other Languages260265 +-Node: Notes for Debugging262451 +-Node: I18N263504 +-Node: Run Time System268074 +-Node: GPC Units377148 +-Node: CRT379328 +-Node: Dos418298 +-Node: DosUnix427587 +-Node: FileUtils432695 +-Node: GMP439120 +-Node: GPCUtil470694 +-Node: HeapMon479118 +-Node: Intl482830 +-Node: MD5490744 +-Node: Overlay493621 +-Node: Pipes496171 +-Node: Ports506409 +-Node: Printer510074 +-Node: RegEx514092 +-Node: Strings526886 +-Node: StringUtils530303 +-Node: System543195 +-Node: TFDD558797 +-Node: Trap560891 +-Node: Turbo3565215 +-Node: WinDos567711 +-Node: Borland Pascal574054 +-Node: BP Compatibility575391 +-Node: BP Incompatibilities576791 +-Node: String type578655 +-Node: Qualified identifiers580769 +-Node: Assembler581170 +-Node: Move; FillChar582307 +-Node: Real type582954 +-Node: Graph unit584115 +-Node: OOP units585466 +-Node: Keep; GetIntVec; SetIntVec585837 +-Node: TFDDs586674 +-Node: Mem; Port; Ptr; Seg; Ofs; PrefixSeg; etc.587190 +-Node: Endianness assumptions588929 +-Node: - -borland-pascal - disable GPC extensions591793 +-Node: -w - disable all warnings592537 +-Node: - -uses=System - Swap; HeapError; etc.593019 +-Node: -D__BP_TYPE_SIZES__ - small integer types etc.593647 +-Node: - -pack-struct - disable structure alignment594397 +-Node: -D__BP_RANDOM__ - BP compatible pseudo random number generator594975 +-Node: -D__BP_UNPORTABLE_ROUTINES__ - Intr; DosVersion; etc.596019 +-Node: -D__BP_PARAMSTR_0__ - BP compatible ParamStr (0) behaviour597231 +-Node: IDE versus command line598571 +-Node: Comments603261 +-Node: BP Compatible Compiler Directives604686 +-Node: Units; GPI files and Automake605160 +-Node: Optimization608213 +-Node: Debugging609200 +-Node: Objects610106 +-Node: Strings in BP and GPC610672 +-Node: Typed Constants612740 +-Node: Bit; Byte and Memory Manipulation614419 +-Node: User-defined Operators in GPC617326 +-Node: Data Types in BP and GPC618054 +-Node: BP Procedural Types621624 +-Node: Files623574 +-Node: Built-in Constants624321 +-Node: Built-in Operators in BP and GPC624709 +-Node: Built-in Procedures and Functions625467 +-Node: Special Parameters626672 +-Node: Miscellaneous627874 +-Node: BP and Extended Pascal630293 +-Node: Portability hints632762 +-Node: Reference638237 +-Node: Abs642763 +-Node: absolute643957 +-Node: abstract647046 +-Node: Addr647387 +-Node: AlignOf648372 +-Node: all649259 +-Node: and649572 +-Node: and then652214 +-Node: and_then653050 +-Node: AnsiChar655130 +-Node: AnyFile655881 +-Node: Append657779 +-Node: ArcCos659218 +-Node: ArcSin659917 +-Node: ArcTan660624 +-Node: Arg661406 +-Node: array662103 +-Node: as663329 +-Node: asm663705 +-Node: asmname664142 +-Node: Assert664489 +-Node: Assign665262 +-Node: Assigned665674 +-Node: attribute666645 +-Node: begin669096 +-Node: Bind669968 +-Node: bindable670372 +-Node: Binding670780 +-Node: BindingType671194 +-Node: BitSizeOf673680 +-Node: BlockRead674839 +-Node: BlockWrite675318 +-Node: Boolean675808 +-Node: Break676611 +-Node: Byte677732 +-Node: ByteBool678596 +-Node: ByteCard679479 +-Node: ByteInt680302 +-Node: c681186 +-Node: Card681498 +-Node: Cardinal682095 +-Node: case683140 +-Node: CBoolean685344 +-Node: CCardinal686208 +-Node: Char686944 +-Node: ChDir687730 +-Node: Chr688571 +-Node: CInteger689166 +-Node: c_language689892 +-Node: class690233 +-Node: Close690573 +-Node: Cmplx690875 +-Node: Comp691446 +-Node: CompilerAssert692239 +-Node: Complex693904 +-Node: Concat694504 +-Node: Conjugate694892 +-Node: const695641 +-Node: constructor697306 +-Node: Continue697662 +-Node: Copy698601 +-Node: Cos700110 +-Node: CString700806 +-Node: CString2String701253 +-Node: CStringCopyString701615 +-Node: CurrentRoutineName702026 +-Node: CWord702682 +-Node: Cycle703447 +-Node: Date704359 +-Node: Dec704969 +-Node: DefineSize706381 +-Node: Delete706724 +-Node: destructor707199 +-Node: Discard707546 +-Node: Dispose708999 +-Node: div709549 +-Node: do710063 +-Node: Double710842 +-Node: downto711408 +-Node: else711964 +-Node: Empty713385 +-Node: end713707 +-Node: EOF714657 +-Node: EOLn715033 +-Node: EpsReal715414 +-Node: EQ715694 +-Node: EQPad716005 +-Node: Erase716310 +-Node: except716616 +-Node: Exclude716879 +-Node: Exit717779 +-Node: Exp719201 +-Node: export720030 +-Node: exports721233 +-Node: Extend721542 +-Node: Extended723020 +-Node: external723452 +-Node: Fail723859 +-Node: False724122 +-Node: far724991 +-Node: file725827 +-Node: FilePos726347 +-Node: FileSize726672 +-Node: FillChar727005 +-Node: finalization727420 +-Node: Finalize727855 +-Node: finally728653 +-Node: Flush728921 +-Node: for729226 +-Node: FormatString730870 +-Node: forward731158 +-Node: Frac731510 +-Node: FrameAddress732784 +-Node: FreeMem733073 +-Node: function733943 +-Node: GE734303 +-Node: GEPad734615 +-Node: Get734918 +-Node: GetMem735303 +-Node: GetTimeStamp736574 +-Node: goto737149 +-Node: GT737569 +-Node: GTPad737877 +-Node: Halt738181 +-Node: High738890 +-Node: if740309 +-Node: Im741808 +-Node: implementation742381 +-Node: import742755 +-Node: in744766 +-Node: Inc745841 +-Node: Include747311 +-Node: Index748205 +-Node: inherited748487 +-Node: initialization748892 +-Node: Initialize749342 +-Node: InOutRes750123 +-Node: Input750437 +-Node: Insert750778 +-Node: Int751119 +-Node: Integer752453 +-Node: interface753261 +-Node: interrupt753618 +-Node: IOResult753977 +-Node: is754285 +-Node: label754628 +-Node: LastPosition755001 +-Node: LE755363 +-Node: Leave755679 +-Node: Length756797 +-Node: LEPad757129 +-Node: library757440 +-Node: Ln757749 +-Node: LoCase758484 +-Node: LongBool758788 +-Node: LongCard759682 +-Node: LongestBool760500 +-Node: LongestCard761425 +-Node: LongestInt762229 +-Node: LongestReal763041 +-Node: LongestWord763541 +-Node: LongInt764365 +-Node: LongReal765249 +-Node: LongWord765685 +-Node: Low766506 +-Node: LT767738 +-Node: LTPad768045 +-Node: Mark768349 +-Node: Max768643 +-Node: MaxChar768958 +-Node: MaxInt769297 +-Node: MaxReal769719 +-Node: MedBool770024 +-Node: MedCard770904 +-Node: MedInt771787 +-Node: MedReal772626 +-Node: MedWord773042 +-Node: Min773927 +-Node: MinReal774245 +-Node: MkDir774545 +-Node: mod775369 +-Node: module775766 +-Node: Move776094 +-Node: MoveLeft776421 +-Node: MoveRight776764 +-Node: name777111 +-Node: NE780203 +-Node: near780510 +-Node: NEPad781341 +-Node: New781646 +-Node: NewCString782547 +-Node: nil782877 +-Node: not784356 +-Node: Null784834 +-Node: object786325 +-Node: Odd787140 +-Node: of787861 +-Node: on788304 +-Node: only788545 +-Node: operator788859 +-Node: or789166 +-Node: Ord791760 +-Node: or else792697 +-Node: or_else793500 +-Node: otherwise795444 +-Node: Output796851 +-Node: overload797200 +-Node: override797473 +-Node: Pack797812 +-Node: packed798302 +-Node: Page800064 +-Node: PAnsiChar800422 +-Node: ParamCount800888 +-Node: ParamStr801705 +-Node: PChar802546 +-Node: Pi803013 +-Node: PObjectType803271 +-Node: Pointer804750 +-Node: Polar805235 +-Node: Pos805559 +-Node: Position805876 +-Node: pow806217 +-Node: Pred806694 +-Node: private808718 +-Node: procedure809154 +-Node: program809524 +-Node: property809893 +-Node: protected810234 +-Node: PtrCard810801 +-Node: PtrDiffType811396 +-Node: PtrInt812104 +-Node: PtrWord812685 +-Node: public813273 +-Node: published813708 +-Node: Put814148 +-Node: qualified814540 +-Node: raise814872 +-Node: Random815137 +-Node: Randomize815406 +-Node: Re815681 +-Node: Read816188 +-Node: ReadLn816629 +-Node: ReadStr817028 +-Node: Real817366 +-Node: record817897 +-Node: Release820455 +-Node: Rename820764 +-Node: repeat821094 +-Node: Reset822125 +-Node: resident823437 +-Node: restricted823767 +-Node: Result824118 +-Node: Return824670 +-Node: ReturnAddress824943 +-Node: Rewrite825238 +-Node: RmDir827956 +-Node: Round828777 +-Node: RunError830381 +-Node: Seek830703 +-Node: SeekEOF831032 +-Node: SeekEOLn831355 +-Node: SeekRead831686 +-Node: SeekUpdate832053 +-Node: SeekWrite832429 +-Node: segment832800 +-Node: Self833114 +-Node: set833395 +-Node: SetFileTime834956 +-Node: SetLength835338 +-Node: SetType836439 +-Node: shl839010 +-Node: ShortBool839976 +-Node: ShortCard840874 +-Node: ShortInt841685 +-Node: ShortReal842540 +-Node: ShortWord842985 +-Node: shr843941 +-Node: Sin845130 +-Node: Single845824 +-Node: SizeOf846129 +-Node: SizeType846976 +-Node: SmallInt847537 +-Node: Sqr848296 +-Node: SqRt849134 +-Node: StandardError850169 +-Node: StandardInput850468 +-Node: StandardOutput850793 +-Node: StdErr851114 +-Node: Str851913 +-Node: String852685 +-Node: String2CString852980 +-Node: SubStr853336 +-Node: Succ854551 +-Node: Text856567 +-Node: then857081 +-Node: Time857664 +-Node: TimeStamp858279 +-Node: to860410 +-Node: to begin do860841 +-Node: to end do861161 +-Node: Trim861480 +-Node: True861796 +-Node: Trunc862663 +-Node: Truncate864055 +-Node: try864373 +-Node: type864624 +-Node: type of867155 +-Node: TypeOf867404 +-Node: Unbind868601 +-Node: unit868994 +-Node: Unpack869309 +-Node: until869808 +-Node: UpCase870239 +-Node: Update870548 +-Node: uses870870 +-Node: Val872330 +-Node: value874217 +-Node: var874756 +-Node: view877092 +-Node: virtual877442 +-Node: Void877788 +-Node: while878267 +-Node: with879209 +-Node: Word879624 +-Node: WordBool880445 +-Node: Write881325 +-Node: WriteLn881826 +-Node: WriteStr882279 +-Node: xor882646 +-Node: Keywords884147 +-Node: Support895436 +-Node: Mailing List897134 +-Node: Arhive mailing listi899497 +-Node: Newsgroups900148 +-Node: Profesionalna podr¹ka901472 +-Node: Krahovi prevodioca902211 +-Node: Reporting Bugs902857 +-Node: Testing913861 +-Node: To Do915875 +-Node: Known Bugs917524 +-Node: Planned Features918723 +-Node: Planned - Strings919732 +-Node: Planned - OOP921657 +-Node: Planned - Other types923710 +-Node: Planned - Misc924890 +-Node: Planned - Utilities926789 +-Node: Fixed Bugs927341 +-Node: Internals950553 +-Node: Preprocessor954112 +-Node: Lexical analyzer956582 +-Node: Lexer problems957535 +-Node: BP character constants960634 +-Node: Compiler directives internally965890 +-Node: Syntax parsing969252 +-Node: Parsing conflicts972788 +-Node: Parsing keywords975983 +-Node: forward near far978553 +-Node: Tree nodes979888 +-Node: Parameter passing984690 +-Node: GPI files987157 +-Node: Automake999992 +-Node: File Layout1002542 +-Node: Planned1003328 +-Node: Copying1007399 +-Node: Library Copying1026587 +-Node: Demo Copying1054740 +-Node: Acknowledgments1056372 +-Node: Resursi1070503 +-Node: GNU1075733 +-Node: Manifesto1079265 +-Node: Gnu is Not Unix1080564 +-Ref: Gnu is Not Unix-Footnote-11082929 +-Node: Why GNU1083819 +-Node: GNU Unix Compatibility1084898 +-Node: GNU Availability1085353 +-Node: Why Help GNU1085824 +-Node: How To Contribute to GNU1087230 +-Node: GNU Benefits1089061 +-Ref: GNU Benefits-Footnote-11091325 +-Node: Objections to GNU1091599 +-Ref: Objections to GNU-Footnote-11106109 +-Ref: Objections to GNU-Footnote-21106151 +-Ref: Objections to GNU-Footnote-31106671 +-Node: Funding1106777 +-Node: Indeks1109258 ++Node: FAQ38017 ++Node: GNU Pascal38827 ++Node: ©to i za¹to39264 ++Node: Trenutna verzija41204 ++Node: Kompatibilnost sa Turbo Pascalom42102 ++Node: Podr¾ane platforme43021 ++Node: Instaliranje GPC-a44435 ++Node: Dokumentacijske datoteke45338 ++Node: Komponente46024 ++Node: Debugger46763 ++Node: Libraries48856 ++Node: Darovane jedinice53267 ++Node: IDE53594 ++Node: GPC na DJGPP-u54951 ++Node: ©to je DJGPP55945 ++Node: DJGPP FAQ56485 ++Node: DJGPP download56966 ++Node: Instaliranje GPC-a na DJGPP57682 ++Node: DJGPP Info reader59752 ++Node: DJGPP DPMI server60114 ++Node: Asemblerska sintaksa60570 ++Node: DJGPP-specifièan kod62050 ++Node: Velièina stoga (stack)64489 ++Node: Znakovni nizovi u GPC-u66331 ++Node: String schema67026 ++Node: Nizovi u variant record-ima68065 ++Node: Bajt za duljinu70232 ++Node: Nizovi kao parametri po vrijednosti71057 ++Node: Kratki znakovni nizovi71953 ++Node: C znakovni nizovi72991 ++Node: Tra¾enje pomoæi74567 ++Node: FAQ "Razno"75292 ++Node: Suradnja na projektu75570 ++Node: GPC web poslu¾itelj75858 ++Node: O ovom FAQ-u76237 ++Node: Installation77034 ++Node: Download77578 ++Node: Binary Distributions83094 ++Node: Compiling GPC85725 ++Node: Compilation Notes96229 ++Node: MS-DOS with DJGPP96665 ++Node: MS-DOS or OS/2 with EMX97655 ++Node: MS Windows 95/98/NT98212 ++Node: Cross-Compilers98989 ++Node: Crossbuilding100402 ++Node: Invoking GPC101247 ++Node: GPC Command Line Options104013 ++Node: GPC Options121470 ++Node: Programming131566 ++Node: Source Structures133207 ++Node: The Program134317 ++Node: Label Declaration135902 ++Node: Constant Declaration136308 ++Node: Type Declaration140258 ++Node: Variable Declaration143059 ++Node: Subroutine Declaration144627 ++Node: The Procedure144914 ++Node: The Function145745 ++Node: The Operator147200 ++Node: Subroutine Parameter List Declaration147525 ++Node: Statements153478 ++Node: Assignment153915 ++Node: begin end Compound Statement154443 ++Node: if Statement154929 ++Node: case Statement155695 ++Node: for Statement157580 ++Node: while Statement159880 ++Node: repeat Statement160400 ++Node: asm Inline160948 ++Node: with Statement161404 ++Node: goto Statement161554 ++Node: Procedure Call161794 ++Node: The Declaring Statement162160 ++Node: Loop Control Statements163299 ++Node: Modules and Units163762 ++Node: Modules164083 ++Node: Units168007 ++Node: Data Types170206 ++Node: Type Definition171122 ++Node: Ordinal Types171639 ++Node: Integer Types172824 ++Node: Natural Integer Types173622 ++Node: Main Branch Integer Types174544 ++Node: Integer Types with Specified Size176734 ++Node: Integer Types and Compatibility178087 ++Node: Summary of Integer Types179598 ++Node: Real Types182319 ++Node: String Types184074 ++Node: Character Types184941 ++Node: Enumerated Types185245 ++Node: File Types186256 ++Node: Boolean (Intrinsic)187318 ++Node: Pointer (Intrinsic)188054 ++Node: Type Definition Possibilities188456 ++Node: Subrange Types189232 ++Node: Array Types190471 ++Node: Record Types191591 ++Node: Variant Records193046 ++Node: Schema Types194030 ++Node: Set Types201041 ++Node: Pointer Types202192 ++Node: Procedural Types203952 ++Node: Object Types206564 ++Node: Type Initializers206884 ++Node: Restricted Types208530 ++Node: Machine-dependencies in Types210714 ++Node: Endianness211031 ++Node: Alignment214643 ++Node: Operators214808 ++Node: Built-in Operators215151 ++Node: User-defined Operators216080 ++Node: Parameters217475 ++Node: Protected Parameters217874 ++Node: Conformant Arrays218665 ++Node: Open Arrays218957 ++Node: String Slice Access219736 ++Node: Pointer Arithmetics221059 ++Node: Type Casts222358 ++Node: OOP226673 ++Node: Compiler Directives231446 ++Node: Library Routines239376 ++Node: File Routines239978 ++Node: String Operations245395 ++Node: Accessing Command Line Arguments248013 ++Node: Memory Management Routines248849 ++Node: Operations for Integer and Ordinal Types249835 ++Node: Complex Number Operations251199 ++Node: Set Operations253257 ++Node: Date And Time Routines255539 ++Node: Other Languages256280 ++Node: Importing Libraries from Other Languages257209 ++Node: Exporting GPC Libraries to Other Languages260633 ++Node: Notes for Debugging262819 ++Node: I18N263872 ++Node: Run Time System268442 ++Node: GPC Units378748 ++Node: CRT380928 ++Node: Dos419898 ++Node: DosUnix429187 ++Node: FileUtils434295 ++Node: GMP440720 ++Node: GPCUtil472294 ++Node: HeapMon480718 ++Node: Intl484430 ++Node: MD5492344 ++Node: Overlay495221 ++Node: Pipes497771 ++Node: Ports508009 ++Node: Printer511674 ++Node: RegEx515692 ++Node: Strings528486 ++Node: StringUtils531903 ++Node: System544795 ++Node: TFDD560397 ++Node: Trap562491 ++Node: Turbo3566815 ++Node: WinDos569311 ++Node: Borland Pascal575654 ++Node: BP Compatibility576991 ++Node: BP Incompatibilities578391 ++Node: String type580255 ++Node: Qualified identifiers582369 ++Node: Assembler582770 ++Node: Move; FillChar583907 ++Node: Real type584554 ++Node: Graph unit585715 ++Node: OOP units587066 ++Node: Keep; GetIntVec; SetIntVec587437 ++Node: TFDDs588274 ++Node: Mem; Port; Ptr; Seg; Ofs; PrefixSeg; etc.588790 ++Node: Endianness assumptions590529 ++Node: - -borland-pascal - disable GPC extensions593393 ++Node: -w - disable all warnings594137 ++Node: - -uses=System - Swap; HeapError; etc.594619 ++Node: -D__BP_TYPE_SIZES__ - small integer types etc.595247 ++Node: - -pack-struct - disable structure alignment595997 ++Node: -D__BP_RANDOM__ - BP compatible pseudo random number generator596575 ++Node: -D__BP_UNPORTABLE_ROUTINES__ - Intr; DosVersion; etc.597619 ++Node: -D__BP_PARAMSTR_0__ - BP compatible ParamStr (0) behaviour598831 ++Node: IDE versus command line600171 ++Node: Comments604861 ++Node: BP Compatible Compiler Directives606286 ++Node: Units; GPI files and Automake606760 ++Node: Optimization609813 ++Node: Debugging610800 ++Node: Objects611706 ++Node: Strings in BP and GPC612272 ++Node: Typed Constants614340 ++Node: Bit; Byte and Memory Manipulation616019 ++Node: User-defined Operators in GPC618926 ++Node: Data Types in BP and GPC619654 ++Node: BP Procedural Types623224 ++Node: Files625174 ++Node: Built-in Constants625921 ++Node: Built-in Operators in BP and GPC626309 ++Node: Built-in Procedures and Functions627067 ++Node: Special Parameters628272 ++Node: Miscellaneous629474 ++Node: BP and Extended Pascal631893 ++Node: Portability hints634362 ++Node: Reference639837 ++Node: Abs644391 ++Node: absolute645585 ++Node: abstract648674 ++Node: Addr649015 ++Node: AlignOf650000 ++Node: all650887 ++Node: and651200 ++Node: and then653842 ++Node: and_then654678 ++Node: AnsiChar656758 ++Node: AnyFile657509 ++Node: Append659407 ++Node: ArcCos660846 ++Node: ArcSin661545 ++Node: ArcTan662252 ++Node: Arg663034 ++Node: array663731 ++Node: as664957 ++Node: asm665333 ++Node: asmname665770 ++Node: Assert666117 ++Node: Assign666890 ++Node: Assigned667302 ++Node: attribute668273 ++Node: begin670724 ++Node: Bind671596 ++Node: bindable672000 ++Node: Binding672408 ++Node: BindingType672822 ++Node: BitSizeOf675308 ++Node: BlockRead676467 ++Node: BlockWrite676946 ++Node: Boolean677436 ++Node: Break678239 ++Node: Byte679360 ++Node: ByteBool680224 ++Node: ByteCard681107 ++Node: ByteInt681930 ++Node: c682814 ++Node: Card683126 ++Node: Cardinal683723 ++Node: case684768 ++Node: CBoolean686972 ++Node: CCardinal687836 ++Node: Char688572 ++Node: ChDir689358 ++Node: Chr690199 ++Node: CInteger690794 ++Node: c_language691520 ++Node: class691861 ++Node: Close692201 ++Node: Cmplx692503 ++Node: Comp693074 ++Node: CompilerAssert693867 ++Node: Complex695532 ++Node: Concat696132 ++Node: Conjugate696520 ++Node: const697269 ++Node: constructor698934 ++Node: Continue699290 ++Node: Copy700229 ++Node: Cos701738 ++Node: CString702434 ++Node: CString2String702881 ++Node: CStringCopyString703243 ++Node: CurrentRoutineName703654 ++Node: CWord704310 ++Node: Cycle705075 ++Node: Date705987 ++Node: Dec706597 ++Node: DefineSize708009 ++Node: Delete708352 ++Node: destructor708827 ++Node: Discard709174 ++Node: Dispose710627 ++Node: div711177 ++Node: do711691 ++Node: Double712470 ++Node: downto713036 ++Node: else713592 ++Node: Empty715013 ++Node: end715335 ++Node: EOF716285 ++Node: EOLn716661 ++Node: EpsReal717042 ++Node: EQ717322 ++Node: EQPad717633 ++Node: Erase717938 ++Node: except718244 ++Node: Exclude718507 ++Node: Exit719407 ++Node: Exp720829 ++Node: export721658 ++Node: exports722861 ++Node: Extend723170 ++Node: Extended724648 ++Node: external725080 ++Node: Fail725487 ++Node: False725750 ++Node: far726619 ++Node: file727455 ++Node: FilePos727975 ++Node: FileSize728300 ++Node: FillChar728633 ++Node: finalization729048 ++Node: Finalize729483 ++Node: finally730281 ++Node: Flush730549 ++Node: for730854 ++Node: FormatString732498 ++Node: forward732786 ++Node: Frac733138 ++Node: FrameAddress734412 ++Node: FreeMem734701 ++Node: function735571 ++Node: GE735931 ++Node: GEPad736243 ++Node: Get736546 ++Node: GetMem736931 ++Node: GetTimeStamp738202 ++Node: goto738777 ++Node: GT739197 ++Node: GTPad739505 ++Node: Halt739809 ++Node: High740518 ++Node: if741937 ++Node: Im743436 ++Node: implementation744009 ++Node: import744383 ++Node: in746394 ++Node: Inc747469 ++Node: Include748939 ++Node: Index749833 ++Node: inherited750115 ++Node: initialization750520 ++Node: Initialize750970 ++Node: InOutRes751751 ++Node: Input752065 ++Node: Insert752406 ++Node: Int752747 ++Node: Integer754081 ++Node: interface754889 ++Node: interrupt755246 ++Node: IOResult755605 ++Node: is755913 ++Node: label756256 ++Node: LastPosition756629 ++Node: LE756991 ++Node: Leave757307 ++Node: Length758425 ++Node: LEPad758757 ++Node: library759068 ++Node: Ln759377 ++Node: LoCase760112 ++Node: LongBool760416 ++Node: LongCard761310 ++Node: LongestBool762128 ++Node: LongestCard763053 ++Node: LongestInt763857 ++Node: LongestReal764669 ++Node: LongestWord765169 ++Node: LongInt765993 ++Node: LongReal766877 ++Node: LongWord767313 ++Node: Low768134 ++Node: LT769366 ++Node: LTPad769673 ++Node: Mark769977 ++Node: Max770271 ++Node: MaxChar770586 ++Node: MaxInt770925 ++Node: MaxReal771347 ++Node: MedBool771652 ++Node: MedCard772532 ++Node: MedInt773415 ++Node: MedReal774254 ++Node: MedWord774670 ++Node: Min775555 ++Node: MinReal775873 ++Node: MkDir776173 ++Node: mod776997 ++Node: module777394 ++Node: Move777722 ++Node: MoveLeft778049 ++Node: MoveRight778392 ++Node: name778739 ++Node: NE781831 ++Node: near782138 ++Node: NEPad782969 ++Node: New783274 ++Node: NewCString784175 ++Node: nil784505 ++Node: not785984 ++Node: Null786462 ++Node: object787953 ++Node: Odd788768 ++Node: of789489 ++Node: on789932 ++Node: only790173 ++Node: operator790487 ++Node: or790794 ++Node: Ord793388 ++Node: or else794325 ++Node: or_else795128 ++Node: otherwise797072 ++Node: Output798479 ++Node: overload798828 ++Node: override799101 ++Node: Pack799440 ++Node: packed799930 ++Node: Page801692 ++Node: PAnsiChar802050 ++Node: ParamCount802516 ++Node: ParamStr803333 ++Node: PChar804174 ++Node: Pi804641 ++Node: PObjectType804899 ++Node: Pointer806512 ++Node: Polar806997 ++Node: Pos807321 ++Node: Position807638 ++Node: pow807979 ++Node: Pred808456 ++Node: private810480 ++Node: procedure810916 ++Node: program811286 ++Node: property811655 ++Node: protected811996 ++Node: PtrCard812563 ++Node: PtrDiffType813158 ++Node: PtrInt813866 ++Node: PtrWord814447 ++Node: public815035 ++Node: published815470 ++Node: Put815910 ++Node: qualified816302 ++Node: raise816634 ++Node: Random816899 ++Node: Randomize817168 ++Node: Re817443 ++Node: Read817950 ++Node: ReadLn818391 ++Node: ReadStr818790 ++Node: ReadString819134 ++Node: Real819424 ++Node: record819958 ++Node: Release822516 ++Node: Rename822825 ++Node: repeat823155 ++Node: Reset824186 ++Node: resident825498 ++Node: restricted825828 ++Node: Result826179 ++Node: Return826731 ++Node: ReturnAddress827004 ++Node: Rewrite827299 ++Node: RmDir830017 ++Node: Round830838 ++Node: RunError832442 ++Node: Seek832764 ++Node: SeekEOF833093 ++Node: SeekEOLn833416 ++Node: SeekRead833747 ++Node: SeekUpdate834114 ++Node: SeekWrite834490 ++Node: segment834861 ++Node: Self835175 ++Node: set835456 ++Node: SetFileTime837017 ++Node: SetLength837399 ++Node: SetType838500 ++Node: shl841071 ++Node: ShortBool842037 ++Node: ShortCard842935 ++Node: ShortInt843746 ++Node: ShortReal844601 ++Node: ShortWord845046 ++Node: shr846002 ++Node: Sin847191 ++Node: Single847885 ++Node: SizeOf848190 ++Node: SizeType849037 ++Node: SmallInt849598 ++Node: Sqr850357 ++Node: SqRt851195 ++Node: StandardError852230 ++Node: StandardInput852529 ++Node: StandardOutput852854 ++Node: StdErr853175 ++Node: Str853974 ++Node: String854746 ++Node: String2CString855041 ++Node: StringOf855399 ++Node: SubStr856027 ++Node: Succ857236 ++Node: Text859252 ++Node: then859766 ++Node: Time860349 ++Node: TimeStamp860964 ++Node: to863095 ++Node: to begin do863526 ++Node: to end do863846 ++Node: Trim864165 ++Node: True864481 ++Node: Trunc865348 ++Node: Truncate866740 ++Node: try867058 ++Node: type867309 ++Node: type of869840 ++Node: TypeOf870089 ++Node: Unbind871286 ++Node: unit871679 ++Node: Unpack871994 ++Node: until872493 ++Node: UpCase872924 ++Node: Update873233 ++Node: uses873555 ++Node: Val875015 ++Node: value876902 ++Node: var877441 ++Node: view879777 ++Node: virtual880127 ++Node: Void880473 ++Node: while880952 ++Node: with881894 ++Node: Word882309 ++Node: WordBool883130 ++Node: Write884010 ++Node: WriteLn884511 ++Node: WriteStr884964 ++Node: xor885331 ++Node: Keywords886832 ++Node: Support898125 ++Node: Mailing List899823 ++Node: Arhive mailing listi902186 ++Node: Newsgroups902837 ++Node: Profesionalna podr¹ka904161 ++Node: Krahovi prevodioca904900 ++Node: Reporting Bugs905546 ++Node: Testing916550 ++Node: To Do918564 ++Node: Known Bugs920213 ++Node: Planned Features921412 ++Node: Planned - Strings922421 ++Node: Planned - OOP924346 ++Node: Planned - Other types926399 ++Node: Planned - Misc927579 ++Node: Planned - Utilities929478 ++Node: Fixed Bugs930030 ++Node: Internals954358 ++Node: Preprocessor957917 ++Node: Lexical analyzer960387 ++Node: Lexer problems961340 ++Node: BP character constants964439 ++Node: Compiler directives internally969695 ++Node: Syntax parsing973057 ++Node: Parsing conflicts976593 ++Node: Parsing keywords979788 ++Node: forward near far982358 ++Node: Tree nodes983693 ++Node: Parameter passing988495 ++Node: GPI files990962 ++Node: Automake1003797 ++Node: File Layout1006347 ++Node: Planned1007133 ++Node: Copying1011204 ++Node: Library Copying1048771 ++Node: Demo Copying1076924 ++Node: Acknowledgments1078556 ++Node: Resursi1092687 ++Node: GNU1097917 ++Node: Manifesto1101449 ++Node: Gnu is Not Unix1102748 ++Ref: Gnu is Not Unix-Footnote-11105113 ++Node: Why GNU1106003 ++Node: GNU Unix Compatibility1107082 ++Node: GNU Availability1107537 ++Node: Why Help GNU1108008 ++Node: How To Contribute to GNU1109414 ++Node: GNU Benefits1111245 ++Ref: GNU Benefits-Footnote-11113509 ++Node: Objections to GNU1113783 ++Ref: Objections to GNU-Footnote-11128293 ++Ref: Objections to GNU-Footnote-21128335 ++Ref: Objections to GNU-Footnote-31128855 ++Node: Funding1128961 ++Node: Indeks1131442 +  + End Tag Table +diff -urN gpc-20060325/p/doc/info/gpc.info gpc-20070904/p/doc/info/gpc.info +--- gpc-20060325/p/doc/info/gpc.info 2006-03-25 03:25:20.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpc.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-This is ../../gcc-4.0.2/gcc/p/doc/info/gpc.info, produced by makeinfo ++This is ../../gcc-3.4.6/gcc/p/doc/info/gpc.info, produced by makeinfo + version 4.7 from gpc.texi. + + INFO-DIR-SECTION GNU programming tools +@@ -42,7 +42,7 @@ + + This manual documents how to run, install and maintain the GNU Pascal + Compiler (GPC), as well as its new features and incompatibilities, and +-how to report bugs. It corresponds to GPC 20060325 (GCC 2.8.1, 2.95.x, ++how to report bugs. It corresponds to GPC 20070904 (GCC 2.8.1, 2.95.x, + 3.2.x, 3.3.x or 3.4.x). + + * Menu: +@@ -556,6 +556,19 @@ + to minor problems with old code, but we suppose they're rare and easy + to overcome. Backward-incompatible changes are marked with `(@)'. + ++ * support building libgpc as Mach shared library ++ ++ * `GPC_Initialize' and `GPC_Finalize' available as user routines (to ++ help building shared libraries) ++ ++ * better warnings for unexpected results of string comparisons ++ ++ * handle `volatile' attribute on types ++ ++ * allow `asm' in any dialect (if the `asm' keyword is enabled) ++ ++ * support for gcc-4.1.x ++ + * preliminary support for gcc-4.0.x + + * handle named exit from a method +@@ -1069,7 +1082,7 @@ + 3.1.2 What is the current version? + ---------------------------------- + +-The current version is 20060325. ++The current version is 20070904. + + Releases are available as a source archive and precompiled binaries + for several common platforms from the GPC web site, +@@ -7684,7 +7697,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -7705,7 +7718,7 @@ + General Public License. } + + {$gnu-pascal,I-} +- {$if __GPC_RELEASE__ <> 20060325} ++ {$if __GPC_RELEASE__ <> 20070904} + {$error + Trying to compile gpc.pas with a non-matching GPC version is likely + to cause problems. +@@ -8194,32 +8207,35 @@ + function LoCaseStr (const s: String) = Result: TString; + attribute (name = '_p_LoCaseStr'); external; + +- function StrEqualCase (const s1, s2: String): Boolean; attribute +- (name = '_p_StrEqualCase'); external; ++ function StrEqualCase (const s1: String; const s2: String): ++ Boolean; attribute (name = '_p_StrEqualCase'); external; + +- function Pos (const SubString, s: String): Integer; +- attribute (name = '_p_Pos'); external; ++ function Pos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_Pos'); external; + function PosChar (const ch: Char; const s: String): + Integer; attribute (name = '_p_PosChar'); external; +- function LastPos (const SubString, s: String): Integer; +- attribute (name = '_p_LastPos'); external; +- function PosCase (const SubString, s: String): Integer; +- attribute (name = '_p_PosCase'); external; +- function LastPosCase (const SubString, s: String): Integer; +- attribute (name = '_p_LastPosCase'); external; ++ function LastPos (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPos'); external; ++ function PosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_PosCase'); external; ++ function LastPosCase (const SubString: String; const s: ++ String): Integer; attribute (name = '_p_LastPosCase'); external; + function CharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_CharPos'); external; + function LastCharPos (const Chars: CharSet; const s: String): + Integer; attribute (name = '_p_LastCharPos'); external; + +- function PosFrom (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFrom'); external; +- function LastPosTill (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTill'); external; +- function PosFromCase (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_PosFromCase'); external; +- function LastPosTillCase (const SubString, s: String; Till: +- Integer): Integer; attribute (name = '_p_LastPosTillCase'); ++ function PosFrom (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFrom'); ++ external; ++ function LastPosTill (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTill'); ++ external; ++ function PosFromCase (const SubString: String; const s: String; ++ From: Integer): Integer; attribute (name = '_p_PosFromCase'); ++ external; ++ function LastPosTillCase (const SubString: String; const s: String; ++ Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); + external; + function CharPosFrom (const Chars: CharSet; const s: String; + From: Integer): Integer; attribute (name = '_p_CharPosFrom'); +@@ -8228,14 +8244,14 @@ + Till: Integer): Integer; attribute (name = '_p_LastCharPosTill'); + external; + +- function IsPrefix (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefix'); external; +- function IsSuffix (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffix'); external; +- function IsPrefixCase (const Prefix, s: String): Boolean; +- attribute (name = '_p_IsPrefixCase'); external; +- function IsSuffixCase (const Suffix, s: String): Boolean; +- attribute (name = '_p_IsSuffixCase'); external; ++ function IsPrefix (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefix'); external; ++ function IsSuffix (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffix'); external; ++ function IsPrefixCase (const Prefix: String; const s: String): ++ Boolean; attribute (name = '_p_IsPrefixCase'); external; ++ function IsSuffixCase (const Suffix: String; const s: String): ++ Boolean; attribute (name = '_p_IsSuffixCase'); external; + + function CStringLength (Src: CString): SizeType; attribute + (inline, name = '_p_CStringLength'); external; +@@ -8390,8 +8406,8 @@ + + { Sets an environment variable with the name given in VarName to the + value Value. A previous value, if any, is overwritten. } +- procedure SetEnv (const VarName, Value: String); attribute (name +- = '_p_SetEnv'); external; ++ procedure SetEnv (const VarName: String; const Value: String); ++ attribute (name = '_p_SetEnv'); external; + + { Un-sets an environment variable with the name given in VarName. } + procedure UnSetEnv (const VarName: String); attribute (name +@@ -8467,6 +8483,10 @@ + RTSErrorFileName: PString; attribute (name = '_p_ErrorFileName'); + external; + ++ { Finalize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. } ++ procedure GPC_Finalize; ++ attribute (name = '_p_finalize'); external; + function GetErrorMessage (n: Integer): CString; + attribute (name = '_p_GetErrorMessage'); external; + procedure RuntimeError (n: Integer); attribute +@@ -9162,17 +9182,17 @@ + otherwise returns an empty string. If aFileName already contains + an element of DirSeparators, returns Slash2OSDirSeparator + (aFileName) if it exists. } +- function FSearch (const aFileName, DirList: String): TString; +- attribute (name = '_p_FSearch'); external; ++ function FSearch (const aFileName: String; const DirList: String): ++ TString; attribute (name = '_p_FSearch'); external; + + { Like FSearch, but only find executable files. Under Dos, if not + found, the function tries appending '.com', '.exe', '.bat' and + `.cmd' (the last one only if $COMSPEC points to a `cmd.exe'), so + you don't have to specify these extensions in aFileName (and with + respect to portability, it might be preferable not to do so). } +- function FSearchExecutable (const aFileName, DirList: String) = +- Result: TString; attribute (name = '_p_FSearchExecutable'); +- external; ++ function FSearchExecutable (const aFileName: String; const DirList: ++ String) = Result: TString; attribute (name ++ = '_p_FSearchExecutable'); external; + + { Replaces all occurrences of `$FOO' and `~' in s by the value of + the environment variables FOO or HOME, respectively. If a variable +@@ -9216,8 +9236,9 @@ + + { Splits a file name into directory, name and extension. Each of + Dir, BaseName and Ext may be Null. } +- procedure FSplit (const Path: String; var Dir, BaseName, Ext: +- String); attribute (name = '_p_FSplit'); external; ++ procedure FSplit (const Path: String; var Dir: String; var BaseName: ++ String; var Ext: String); attribute (name = '_p_FSplit'); ++ external; + + { Functions that extract one or two of the parts from FSplit. + DirFromPath returns DirSelf + DirSeparator if the path contains no +@@ -9255,9 +9276,9 @@ + + { Returns the first occurence of SubString in s that is not quoted + at the beginning, or 0 if no such occurence exists. } +- function FindNonQuotedStr (const SubString, s: String; From: +- Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); +- external; ++ function FindNonQuotedStr (const SubString: String; const s: ++ String; From: Integer): Integer; attribute (name ++ = '_p_FindNonQuotedStr'); external; + + { Does a string contain non-quoted wildcard characters? } + function HasWildCards (const s: String): Boolean; attribute (name +@@ -9291,12 +9312,13 @@ + = '_p_DisposePPStrings'); external; + + { Tests if a file name matches a shell wildcard pattern (?, *, []) } +- function FileNameMatch (const Pattern, FileName: String): Boolean; +- attribute (name = '_p_FileNameMatch'); external; ++ function FileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_FileNameMatch'); external; + + { FileNameMatch with BraceExpand } +- function MultiFileNameMatch (const Pattern, FileName: String): +- Boolean; attribute (name = '_p_MultiFileNameMatch'); external; ++ function MultiFileNameMatch (const Pattern: String; const FileName: ++ String): Boolean; attribute (name = '_p_MultiFileNameMatch'); ++ external; + + { File name globbing } + { GlobInit is implied by Glob and MultiGlob, not by GlobOn and +@@ -9432,9 +9454,9 @@ + HOME is not. However, it is easy for users to set it if they want + their config files in a certain directory rather than with the + executables. } +- function ConfigFileName (const Prefix, BaseName: String; Global: +- Boolean): TString; attribute (name = '_p_ConfigFileName'); +- external; ++ function ConfigFileName (const Prefix: String; const BaseName: ++ String; Global: Boolean): TString; attribute (name ++ = '_p_ConfigFileName'); external; + + { Returns a directory name suitable for global, machine-independent + data. The function garantees that the name returned ends with a +@@ -9455,8 +9477,9 @@ + + About the symbols used above, and the two possibilities under Dos, + see the comments for ConfigFileName. } +- function DataDirectoryName (const Prefix, BaseName: String): +- TString; attribute (name = '_p_DataDirectoryName'); external; ++ function DataDirectoryName (const Prefix: String; const BaseName: ++ String): TString; attribute (name = '_p_DataDirectoryName'); ++ external; + + { Executes a command line. Reports execution errors via the IOResult + mechanism and returns the exit status of the executed program. +@@ -10009,6 +10032,17 @@ + + { Initialization, from init.pas } + ++ { Initialize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. ++ ArgumentCount, Arguments are argc and argv in C; StartEnvironment ++ is the environment variable pointer, and can be nil if other ways ++ to obtain the environment are available. Options can be 0 or a ++ combination of ro_* flags as defined in rts/constants.def. } ++ procedure GPC_Initialize (ArgumentCount: CInteger; ++ Arguments, StartEnvironment: PCStrings; ++ Options: CInteger); ++ attribute (name = '_p_initialize'); external; ++ + var + InitProc: ^procedure; attribute (name = '_p_InitProc'); external; + +@@ -10259,7 +10293,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -10981,7 +11015,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11191,7 +11225,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11292,7 +11326,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -11433,7 +11467,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12071,7 +12105,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12300,7 +12334,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12400,7 +12434,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -12599,7 +12633,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -12677,7 +12711,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12758,7 +12792,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -12983,7 +13017,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13066,7 +13100,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13255,7 +13289,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13421,7 +13455,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13496,7 +13530,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -13847,7 +13881,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14151,7 +14185,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14249,7 +14283,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14312,7 +14346,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -14411,7 +14445,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -16370,6 +16404,7 @@ + * Read:: + * ReadLn:: + * ReadStr:: ++* ReadString:: + * Real:: + * record:: + * Release:: +@@ -16418,6 +16453,7 @@ + * Str:: + * String:: + * String2CString:: ++* StringOf:: + * SubStr:: + * Succ:: + * Text:: +@@ -25244,9 +25280,12 @@ + object type and can be accessed via `TypeOf'. + + `Size' contains the size of the object type, `NegatedSize' contains +-the size negated (for runtime checks). `Parent' contains a pointer to +-the parent type's VMT (or nil if the type has no parent). `Name' points +-to a string containing the type's name. ++the size negated (for optional runtime checks). `Parent' contains a ++pointer to the parent type's VMT (or nil if the type has no parent). ++`Name' points to a string containing the type's name. ++ ++ For abstract object types, `Size' contains 0 and `NegatedSize' ++contains -1, so they will always fail the runtime check. + + Conforming to + ------------- +@@ -26100,7 +26139,7 @@ + -------- + +  +-File: gpc.info, Node: ReadStr, Next: Real, Prev: ReadLn, Up: Reference ++File: gpc.info, Node: ReadStr, Next: ReadString, Prev: ReadLn, Up: Reference + + ReadStr + ======= +@@ -26127,7 +26166,28 @@ + -------- + +  +-File: gpc.info, Node: Real, Next: record, Prev: ReadStr, Up: Reference ++File: gpc.info, Node: ReadString, Next: Real, Prev: ReadStr, Up: Reference ++ ++ReadString ++========== ++ ++Description ++----------- ++ ++`ReadString' is an alternative name for `ReadStr' ++ ++Conforming to ++------------- ++ ++`ReadString' is a Mac Pascal extension. ++ ++See also ++-------- ++ ++*Note ReadStr:: ++ ++ ++File: gpc.info, Node: Real, Next: record, Prev: ReadString, Up: Reference + + Real + ==== +@@ -28039,7 +28099,7 @@ + -------- + +  +-File: gpc.info, Node: String2CString, Next: SubStr, Prev: String, Up: Reference ++File: gpc.info, Node: String2CString, Next: StringOf, Prev: String, Up: Reference + + String2CString + ============== +@@ -28066,7 +28126,43 @@ + -------- + +  +-File: gpc.info, Node: SubStr, Next: Succ, Prev: String2CString, Up: Reference ++File: gpc.info, Node: StringOf, Next: SubStr, Prev: String2CString, Up: Reference ++ ++StringOf ++======== ++ ++Synopsis ++-------- ++ ++ function StringOf (VALUES_AND_FORMAT_SPECIFICATIONS): String; ++ ++Description ++----------- ++ ++`StringOf' prints its arguments to an internal buffer and returns ++resulting string. Value and format specifications are handled exactly ++the same as in `Write' or `WriteStr'. ++ ++Conforming to ++------------- ++ ++`StringOf' is a Mac Pascal extension. ++ ++Example ++------- ++ ++ program StringOfDemo; ++ begin ++ writeln(StringOf('2 * 2 = ', 2 * 2)) ++ end. ++ ++See also ++-------- ++ ++*Note Write:: *Note WriteStr::. ++ ++ ++File: gpc.info, Node: SubStr, Next: Succ, Prev: StringOf, Up: Reference + + SubStr + ====== +@@ -29748,7 +29844,7 @@ + as (OP, BD, MP) (*note as::) + object type membership test and conversion + +-asm (BP, BD) (*note asm::) ++asm (BP, BD, MP) (*note asm::) + GNU style inline assembler code + + asmname (GPC) (*note asmname::) +@@ -30523,7 +30619,7 @@ + list can be found at `http://www.gnu-pascal.de/crystal/gpc/en/'. + + The list changes regularly. The present version refers to the +-current GPC snapshot, 20060325. ++current GPC snapshot, 20070904. + + This list is part of the GNU Pascal Manual, included in GPC + distributions and snapshots. You can always browse the most current +@@ -30824,6 +30920,39 @@ + you can check if some problem has already been solved in a recent + release or developer version. For new features, see *Note News::. + ++ * 20070903: Prevent multiple evaluation of some string expressions ++ (roland2.pas). ++ ++ * 20070903: Correct range checking for `Succ' and `Pred' applied to ++ enumerations (`fsc2[24].pas') on 64-bit machines. ++ ++ * 20070903: Check that procedures assigned to constant variables are ++ not nested (did not work with 4.x backends) (nicola4c.pas). ++ ++ * 20070903: On 64-bit machines range check for small unsigned ++ subranges failed to work (range2.pas and chuck6.pas). ++ ++ * 20070902: Allow copy on function values (copy1.pas). ++ ++ * 20070831: Do not ICE on break outside loop (affected 4.x backends) ++ (russ5[ab].pas). ++ ++ * 20070830: Fix crash for some initializers (affected 4.x backends) ++ (igor2.pas). ++ ++ * 20060830: Allow jumps into blocks when `-no-iso-goto-restrictions' ++ is in force (goto9[cd].pas). ++ ++ * 20060722: Some initializers with nested strings were rejected ++ (velo1.pas). ++ ++ * 20060519: Correct some build problems. ++ ++ * 20060505: Local `R-' option affected rest of the file ++ (gale12[a-h].pas). ++ ++ * 20060424: Handle empty string in InternalStringOf (stro2.pas). ++ + * 20060304: Do not allow passing strings to parameters of type array + of char subrange (avoids passing out of range values). + +@@ -32698,295 +32827,666 @@ + Appendix A GNU GENERAL PUBLIC LICENSE + ************************************* + +- Version 2, June 1991 ++ Version 3, 29 June 2007 + +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. ++ Everyone is permitted to copy and distribute verbatim copies of this ++ license document, but changing it is not allowed. + +-GPL Preamble +-============ ++Preamble ++======== + +-The licenses for most software are designed to take away your freedom +-to share and change it. By contrast, the GNU General Public License is +-intended to guarantee your freedom to share and change free software - +-to make sure the software is free for all its users. This General +-Public License applies to most of the Free Software Foundation's +-software and to any other program whose authors commit to using it. +-(Some other Free Software Foundation software is covered by the GNU +-Lesser General Public License instead.) You can apply it to your +-programs, too. ++The GNU General Public License is a free, copyleft license for software ++and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains ++free software for all its users. We, the Free Software Foundation, use ++the GNU General Public License for most of our software; it applies ++also to any other work released this way by its authors. You can apply ++it to your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it in +-new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you ++have certain responsibilities if you distribute copies of the software, ++or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, +-and (2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, receive ++or can get the source code. And you must show them these terms so they ++know their rights. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the ++manufacturer can do so. This is fundamentally incompatible with the ++aim of protecting users' freedom to change the software. The ++systematic pattern of such abuse occurs in the area of products for ++individuals to use, which is precisely where it is most unacceptable. ++Therefore, we have designed this version of the GPL to prohibit the ++practice for those products. If such problems arise substantially in ++other domains, we stand ready to extend this provision to those domains ++in future versions of the GPL, as needed to protect the freedom of ++users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- 0. This License applies to any program or other work which contains a +- notice placed by the copyright holder saying it may be distributed +- under the terms of this General Public License. The "Program", +- below, refers to any such program or work, and a "work based on +- the Program" means either the Program or any derivative work under +- copyright law: that is to say, a work containing the Program or a +- portion of it, either verbatim or with modifications and/or +- translated into another language. (Hereinafter, translation is +- included without limitation in the term "modification".) Each +- licensee is addressed as "you". +- +- Activities other than copying, distribution and modification are +- not covered by this License; they are outside its scope. The act +- of running the Program is not restricted, and the output from the +- Program is covered only if its contents constitute a work based on +- the Program (independent of having been made by running the +- Program). Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +- source code as you receive it, in any medium, provided that you +- conspicuously and appropriately publish on each copy an appropriate +- copyright notice and disclaimer of warranty; keep intact all the +- notices that refer to this License and to the absence of any +- warranty; and give any other recipients of the Program a copy of +- this License along with the Program. +- +- You may charge a fee for the physical act of transferring a copy, +- and you may at your option offer warranty protection in exchange +- for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +- of it, thus forming a work based on the Program, and copy and +- distribute such modifications or work under the terms of Section 1 +- above, provided that you also meet all of these conditions: +- +- a. You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b. You must cause any work that you distribute or publish, that +- in whole or in part contains or is derived from the Program +- or any part thereof, to be licensed as a whole at no charge +- to all third parties under the terms of this License. +- +- c. If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display +- an announcement including an appropriate copyright notice and +- a notice that there is no warranty (or else, saying that you +- provide a warranty) and that users may redistribute the +- program under these conditions, and telling the user how to +- view a copy of this License. (Exception: if the Program +- itself is interactive but does not normally print such an +- announcement, your work based on the Program is not required +- to print an announcement.) +- +- These requirements apply to the modified work as a whole. If +- identifiable sections of that work are not derived from the +- Program, and can be reasonably considered independent and separate +- works in themselves, then this License, and its terms, do not +- apply to those sections when you distribute them as separate +- works. But when you distribute the same sections as part of a +- whole which is a work based on the Program, the distribution of +- the whole must be on the terms of this License, whose permissions +- for other licensees extend to the entire whole, and thus to each +- and every part regardless of who wrote it. +- +- Thus, it is not the intent of this section to claim rights or +- contest your rights to work written entirely by you; rather, the +- intent is to exercise the right to control the distribution of +- derivative or collective works based on the Program. ++TERMS AND CONDITIONS ++==================== + +- In addition, mere aggregation of another work not based on the +- Program with the Program (or with a work based on the Program) on +- a volume of a storage or distribution medium does not bring the +- other work under the scope of this License. ++ 0. Definitions. + +- 3. You may copy and distribute the Program (or a work based on it, +- under Section 2) in object code or executable form under the terms +- of Sections 1 and 2 above provided that you also do one of the +- following: +- +- a. Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of +- Sections 1 and 2 above on a medium customarily used for +- software interchange; or, +- +- b. Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a +- medium customarily used for software interchange; or, +- +- c. Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with +- such an offer, in accord with Subsection b above.) +- +- The source code for a work means the preferred form of the work for +- making modifications to it. For an executable work, complete +- source code means all the source code for all modules it contains, +- plus any associated interface definition files, plus the scripts +- used to control compilation and installation of the executable. +- However, as a special exception, the source code distributed need +- not include anything that is normally distributed (in either +- source or binary form) with the major components (compiler, +- kernel, and so on) of the operating system on which the executable +- runs, unless that component itself accompanies the executable. +- +- If distribution of executable or object code is made by offering +- access to copy from a designated place, then offering equivalent +- access to copy the source code from the same place counts as +- distribution of the source code, even though third parties are not +- compelled to copy the source along with the object code. ++ "This License" refers to version 3 of the GNU General Public ++ License. + +- 4. You may not copy, modify, sublicense, or distribute the Program +- except as expressly provided under this License. Any attempt +- otherwise to copy, modify, sublicense or distribute the Program is +- void, and will automatically terminate your rights under this +- License. However, parties who have received copies, or rights, +- from you under this License will not have their licenses +- terminated so long as such parties remain in full compliance. ++ "Copyright" also means copyright-like laws that apply to other ++ kinds of works, such as semiconductor masks. + +- 5. You are not required to accept this License, since you have not +- signed it. However, nothing else grants you permission to modify +- or distribute the Program or its derivative works. These actions +- are prohibited by law if you do not accept this License. +- Therefore, by modifying or distributing the Program (or any work +- based on the Program), you indicate your acceptance of this +- License to do so, and all its terms and conditions for copying, +- distributing or modifying the Program or works based on it. ++ "The Program" refers to any copyrightable work licensed under this ++ License. Each licensee is addressed as "you". "Licensees" and ++ "recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the ++ work in a fashion requiring copyright permission, other than the ++ making of an exact copy. The resulting work is called a "modified ++ version" of the earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work ++ based on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++ permission, would make you directly or secondarily liable for ++ infringement under applicable copyright law, except executing it ++ on a computer or modifying a private copy. Propagation includes ++ copying, distribution (with or without modification), making ++ available to the public, and in some countries other activities as ++ well. ++ ++ To "convey" a work means any kind of propagation that enables other ++ parties to make or receive copies. Mere interaction with a user ++ through a computer network, with no transfer of a copy, is not ++ conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++ to the extent that it includes a convenient and prominently visible ++ feature that (1) displays an appropriate copyright notice, and (2) ++ tells the user that there is no warranty for the work (except to ++ the extent that warranties are provided), that licensees may ++ convey the work under this License, and how to view a copy of this ++ License. If the interface presents a list of user commands or ++ options, such as a menu, a prominent item in the list meets this ++ criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++ for making modifications to it. "Object code" means any ++ non-source form of a work. ++ ++ A "Standard Interface" means an interface that either is an ++ official standard defined by a recognized standards body, or, in ++ the case of interfaces specified for a particular programming ++ language, one that is widely used among developers working in that ++ language. ++ ++ The "System Libraries" of an executable work include anything, ++ other than the work as a whole, that (a) is included in the normal ++ form of packaging a Major Component, but which is not part of that ++ Major Component, and (b) serves only to enable use of the work ++ with that Major Component, or to implement a Standard Interface ++ for which an implementation is available to the public in source ++ code form. A "Major Component", in this context, means a major ++ essential component (kernel, window system, and so on) of the ++ specific operating system (if any) on which the executable work ++ runs, or a compiler used to produce the work, or an object code ++ interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++ the source code needed to generate, install, and (for an executable ++ work) run the object code and to modify the work, including ++ scripts to control those activities. However, it does not include ++ the work's System Libraries, or general-purpose tools or generally ++ available free programs which are used unmodified in performing ++ those activities but which are not part of the work. For example, ++ Corresponding Source includes interface definition files ++ associated with source files for the work, and the source code for ++ shared libraries and dynamically linked subprograms that the work ++ is specifically designed to require, such as by intimate data ++ communication or control flow between those subprograms and other ++ parts of the work. ++ ++ The Corresponding Source need not include anything that users can ++ regenerate automatically from other parts of the Corresponding ++ Source. ++ ++ The Corresponding Source for a work in source code form is that ++ same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++ copyright on the Program, and are irrevocable provided the stated ++ conditions are met. This License explicitly affirms your unlimited ++ permission to run the unmodified Program. The output from running ++ a covered work is covered by this License only if the output, ++ given its content, constitutes a covered work. This License ++ acknowledges your rights of fair use or other equivalent, as ++ provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++ convey, without conditions so long as your license otherwise ++ remains in force. You may convey covered works to others for the ++ sole purpose of having them make modifications exclusively for ++ you, or provide you with facilities for running those works, ++ provided that you comply with the terms of this License in ++ conveying all material for which you do not control copyright. ++ Those thus making or running the covered works for you must do so ++ exclusively on your behalf, under your direction and control, on ++ terms that prohibit them from making any copies of your ++ copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++ the conditions stated below. Sublicensing is not allowed; section ++ 10 makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++ measure under any applicable law fulfilling obligations under ++ article 11 of the WIPO copyright treaty adopted on 20 December ++ 1996, or similar laws prohibiting or restricting circumvention of ++ such measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++ circumvention of technological measures to the extent such ++ circumvention is effected by exercising rights under this License ++ with respect to the covered work, and you disclaim any intention ++ to limit operation or modification of the work as a means of ++ enforcing, against the work's users, your or third parties' legal ++ rights to forbid circumvention of technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey verbatim copies of the Program's source code as you ++ receive it, in any medium, provided that you conspicuously and ++ appropriately publish on each copy an appropriate copyright notice; ++ keep intact all notices stating that this License and any ++ non-permissive terms added in accord with section 7 apply to the ++ code; keep intact all notices of the absence of any warranty; and ++ give all recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++ and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++ produce it from the Program, in the form of source code under the ++ terms of section 4, provided that you also meet all of these ++ conditions: ++ ++ a. The work must carry prominent notices stating that you ++ modified it, and giving a relevant date. ++ ++ b. The work must carry prominent notices stating that it is ++ released under this License and any conditions added under ++ section 7. This requirement modifies the requirement in ++ section 4 to "keep intact all notices". ++ ++ c. You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable ++ section 7 additional terms, to the whole of the work, and all ++ its parts, regardless of how they are packaged. This License ++ gives no permission to license the work in any other way, but ++ it does not invalidate such permission if you have separately ++ received it. ++ ++ d. If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has ++ interactive interfaces that do not display Appropriate Legal ++ Notices, your work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++ works, which are not by their nature extensions of the covered ++ work, and which are not combined with it such as to form a larger ++ program, in or on a volume of a storage or distribution medium, is ++ called an "aggregate" if the compilation and its resulting ++ copyright are not used to limit the access or legal rights of the ++ compilation's users beyond what the individual works permit. ++ Inclusion of a covered work in an aggregate does not cause this ++ License to apply to the other parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++ of sections 4 and 5, provided that you also convey the ++ machine-readable Corresponding Source under the terms of this ++ License, in one of these ways: ++ ++ a. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b. Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for ++ as long as you offer spare parts or customer support for that ++ product model, to give anyone who possesses the object code ++ either (1) a copy of the Corresponding Source for all the ++ software in the product that is covered by this License, on a ++ durable physical medium customarily used for software ++ interchange, for a price no more than your reasonable cost of ++ physically performing this conveying of source, or (2) access ++ to copy the Corresponding Source from a network server at no ++ charge. ++ ++ c. Convey individual copies of the object code with a copy of ++ the written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, ++ and only if you received the object code with such an offer, ++ in accord with subsection 6b. ++ ++ d. Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access ++ to the Corresponding Source in the same way through the same ++ place at no further charge. You need not require recipients ++ to copy the Corresponding Source along with the object code. ++ If the place to copy the object code is a network server, the ++ Corresponding Source may be on a different server (operated ++ by you or a third party) that supports equivalent copying ++ facilities, provided you maintain clear directions next to ++ the object code saying where to find the Corresponding Source. ++ Regardless of what server hosts the Corresponding Source, you ++ remain obligated to ensure that it is available for as long ++ as needed to satisfy these requirements. ++ ++ e. Convey the object code using peer-to-peer transmission, ++ provided you inform other peers where the object code and ++ Corresponding Source of the work are being offered to the ++ general public at no charge under subsection 6d. ++ ++ ++ A separable portion of the object code, whose source code is ++ excluded from the Corresponding Source as a System Library, need ++ not be included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means ++ any tangible personal property which is normally used for personal, ++ family, or household purposes, or (2) anything designed or sold for ++ incorporation into a dwelling. In determining whether a product ++ is a consumer product, doubtful cases shall be resolved in favor of ++ coverage. For a particular product received by a particular user, ++ "normally used" refers to a typical or common use of that class of ++ product, regardless of the status of the particular user or of the ++ way in which the particular user actually uses, or expects or is ++ expected to use, the product. A product is a consumer product ++ regardless of whether the product has substantial commercial, ++ industrial or non-consumer uses, unless such uses represent the ++ only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++ procedures, authorization keys, or other information required to ++ install and execute modified versions of a covered work in that ++ User Product from a modified version of its Corresponding Source. ++ The information must suffice to ensure that the continued ++ functioning of the modified object code is in no case prevented or ++ interfered with solely because modification has been made. ++ ++ If you convey an object code work under this section in, or with, ++ or specifically for use in, a User Product, and the conveying ++ occurs as part of a transaction in which the right of possession ++ and use of the User Product is transferred to the recipient in ++ perpetuity or for a fixed term (regardless of how the transaction ++ is characterized), the Corresponding Source conveyed under this ++ section must be accompanied by the Installation Information. But ++ this requirement does not apply if neither you nor any third party ++ retains the ability to install modified object code on the User ++ Product (for example, the work has been installed in ROM). ++ ++ The requirement to provide Installation Information does not ++ include a requirement to continue to provide support service, ++ warranty, or updates for a work that has been modified or ++ installed by the recipient, or for the User Product in which it ++ has been modified or installed. Access to a network may be denied ++ when the modification itself materially and adversely affects the ++ operation of the network or violates the rules and protocols for ++ communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information ++ provided, in accord with this section must be in a format that is ++ publicly documented (and with an implementation available to the ++ public in source code form), and must require no special password ++ or key for unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of ++ this License by making exceptions from one or more of its ++ conditions. Additional permissions that are applicable to the ++ entire Program shall be treated as though they were included in ++ this License, to the extent that they are valid under applicable ++ law. If additional permissions apply only to part of the Program, ++ that part may be used separately under those permissions, but the ++ entire Program remains governed by this License without regard to ++ the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++ remove any additional permissions from that copy, or from any part ++ of it. (Additional permissions may be written to require their own ++ removal in certain cases when you modify the work.) You may place ++ additional permissions on material, added by you to a covered work, ++ for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material ++ you add to a covered work, you may (if authorized by the copyright ++ holders of that material) supplement the terms of this License ++ with terms: ++ ++ a. Disclaiming warranty or limiting liability differently from ++ the terms of sections 15 and 16 of this License; or ++ ++ b. Requiring preservation of specified reasonable legal notices ++ or author attributions in that material or in the Appropriate ++ Legal Notices displayed by works containing it; or ++ ++ c. Prohibiting misrepresentation of the origin of that material, ++ or requiring that modified versions of such material be ++ marked in reasonable ways as different from the original ++ version; or ++ ++ d. Limiting the use for publicity purposes of names of licensors ++ or authors of the material; or ++ ++ e. Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f. Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified ++ versions of it) with contractual assumptions of liability to ++ the recipient, for any liability that these contractual ++ assumptions directly impose on those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++ restrictions" within the meaning of section 10. If the Program as ++ you received it, or any part of it, contains a notice stating that ++ it is governed by this License along with a term that is a further ++ restriction, you may remove that term. If a license document ++ contains a further restriction but permits relicensing or ++ conveying under this License, you may add to a covered work ++ material governed by the terms of that license document, provided ++ that the further restriction does not survive such relicensing or ++ conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++ must place, in the relevant source files, a statement of the ++ additional terms that apply to those files, or a notice indicating ++ where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in ++ the form of a separately written license, or stated as exceptions; ++ the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++ provided under this License. Any attempt otherwise to propagate or ++ modify it is void, and will automatically terminate your rights ++ under this License (including any patent licenses granted under ++ the third paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++ license from a particular copyright holder is reinstated (a) ++ provisionally, unless and until the copyright holder explicitly ++ and finally terminates your license, and (b) permanently, if the ++ copyright holder fails to notify you of the violation by some ++ reasonable means prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++ reinstated permanently if the copyright holder notifies you of the ++ violation by some reasonable means, this is the first time you have ++ received notice of violation of this License (for any work) from ++ that copyright holder, and you cure the violation prior to 30 days ++ after your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate ++ the licenses of parties who have received copies or rights from ++ you under this License. If your rights have been terminated and ++ not permanently reinstated, you do not qualify to receive new ++ licenses for the same material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++ run a copy of the Program. Ancillary propagation of a covered work ++ occurring solely as a consequence of using peer-to-peer ++ transmission to receive a copy likewise does not require ++ acceptance. However, nothing other than this License grants you ++ permission to propagate or modify any covered work. These actions ++ infringe copyright if you do not accept this License. Therefore, ++ by modifying or propagating a covered work, you indicate your ++ acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++ receives a license from the original licensors, to run, modify and ++ propagate that work, subject to this License. You are not ++ responsible for enforcing compliance by third parties with this ++ License. ++ ++ An "entity transaction" is a transaction transferring control of an ++ organization, or substantially all assets of one, or subdividing an ++ organization, or merging organizations. If propagation of a ++ covered work results from an entity transaction, each party to that ++ transaction who receives a copy of the work also receives whatever ++ licenses to the work the party's predecessor in interest had or ++ could give under the previous paragraph, plus a right to ++ possession of the Corresponding Source of the work from the ++ predecessor in interest, if the predecessor has it or can get it ++ with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++ rights granted or affirmed under this License. For example, you ++ may not impose a license fee, royalty, or other charge for ++ exercise of rights granted under this License, and you may not ++ initiate litigation (including a cross-claim or counterclaim in a ++ lawsuit) alleging that any patent claim is infringed by making, ++ using, selling, offering for sale, or importing the Program or any ++ portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++ License of the Program or a work on which the Program is based. ++ The work thus licensed is called the contributor's "contributor ++ version". ++ ++ A contributor's "essential patent claims" are all patent claims ++ owned or controlled by the contributor, whether already acquired or ++ hereafter acquired, that would be infringed by some manner, ++ permitted by this License, of making, using, or selling its ++ contributor version, but do not include claims that would be ++ infringed only as a consequence of further modification of the ++ contributor version. For purposes of this definition, "control" ++ includes the right to grant patent sublicenses in a manner ++ consistent with the requirements of this License. ++ ++ Each contributor grants you a non-exclusive, worldwide, ++ royalty-free patent license under the contributor's essential ++ patent claims, to make, use, sell, offer for sale, import and ++ otherwise run, modify and propagate the contents of its ++ contributor version. ++ ++ In the following three paragraphs, a "patent license" is any ++ express agreement or commitment, however denominated, not to ++ enforce a patent (such as an express permission to practice a ++ patent or covenant not to sue for patent infringement). To ++ "grant" such a patent license to a party means to make such an ++ agreement or commitment not to enforce a patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent ++ license, and the Corresponding Source of the work is not available ++ for anyone to copy, free of charge and under the terms of this ++ License, through a publicly available network server or other ++ readily accessible means, then you must either (1) cause the ++ Corresponding Source to be so available, or (2) arrange to deprive ++ yourself of the benefit of the patent license for this particular ++ work, or (3) arrange, in a manner consistent with the requirements ++ of this License, to extend the patent license to downstream ++ recipients. "Knowingly relying" means you have actual knowledge ++ that, but for the patent license, your conveying the covered work ++ in a country, or your recipient's use of the covered work in a ++ country, would infringe one or more identifiable patents in that ++ country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++ arrangement, you convey, or propagate by procuring conveyance of, a ++ covered work, and grant a patent license to some of the parties ++ receiving the covered work authorizing them to use, propagate, ++ modify or convey a specific copy of the covered work, then the ++ patent license you grant is automatically extended to all ++ recipients of the covered work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++ the scope of its coverage, prohibits the exercise of, or is ++ conditioned on the non-exercise of one or more of the rights that ++ are specifically granted under this License. You may not convey a ++ covered work if you are a party to an arrangement with a third ++ party that is in the business of distributing software, under ++ which you make payment to the third party based on the extent of ++ your activity of conveying the work, and under which the third ++ party grants, to any of the parties who would receive the covered ++ work from you, a discriminatory patent license (a) in connection ++ with copies of the covered work conveyed by you (or copies made ++ from those copies), or (b) primarily for and in connection with ++ specific products or compilations that contain the covered work, ++ unless you entered into that arrangement, or that patent license ++ was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++ any implied license or other defenses to infringement that may ++ otherwise be available to you under applicable patent law. + +- 6. Each time you redistribute the Program (or any work based on the +- Program), the recipient automatically receives a license from the +- original licensor to copy, distribute or modify the Program +- subject to these terms and conditions. You may not impose any +- further restrictions on the recipients' exercise of the rights +- granted herein. You are not responsible for enforcing compliance +- by third parties to this License. ++ 12. No Surrender of Others' Freedom. + +- 7. If, as a consequence of a court judgment or allegation of patent +- infringement or for any other reason (not limited to patent +- issues), conditions are imposed on you (whether by court order, ++ If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this +- License. If you cannot distribute so as to satisfy simultaneously +- your obligations under this License and any other pertinent +- obligations, then as a consequence you may not distribute the +- Program at all. For example, if a patent license would not permit +- royalty-free redistribution of the Program by all those who +- receive copies directly or indirectly through you, then the only +- way you could satisfy both it and this License would be to refrain +- entirely from distribution of the Program. +- +- If any portion of this section is held invalid or unenforceable +- under any particular circumstance, the balance of the section is +- intended to apply and the section as a whole is intended to apply +- in other circumstances. +- +- It is not the purpose of this section to induce you to infringe any +- patents or other property right claims or to contest validity of +- any such claims; this section has the sole purpose of protecting +- the integrity of the free software distribution system, which is +- implemented by public license practices. Many people have made +- generous contributions to the wide range of software distributed +- through that system in reliance on consistent application of that +- system; it is up to the author/donor to decide if he or she is +- willing to distribute software through any other system and a +- licensee cannot impose that choice. +- +- This section is intended to make thoroughly clear what is believed +- to be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +- certain countries either by patents or by copyrighted interfaces, +- the original copyright holder who places the Program under this +- License may add an explicit geographical distribution limitation +- excluding those countries, so that distribution is permitted only +- in or among countries not thus excluded. In such case, this +- License incorporates the limitation as if written in the body of +- this License. +- +- 9. The Free Software Foundation may publish revised and/or new +- versions of the General Public License from time to time. Such +- new versions will be similar in spirit to the present version, but +- may differ in detail to address new problems or concerns. ++ License. If you cannot convey a covered work so as to satisfy ++ simultaneously your obligations under this License and any other ++ pertinent obligations, then as a consequence you may not convey it ++ at all. For example, if you agree to terms that obligate you to ++ collect a royalty for further conveying from those to whom you ++ convey the Program, the only way you could satisfy both those ++ terms and this License would be to refrain entirely from conveying ++ the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++ permission to link or combine any covered work with a work licensed ++ under version 3 of the GNU Affero General Public License into a ++ single combined work, and to convey the resulting work. The terms ++ of this License will continue to apply to the part which is the ++ covered work, but the special requirements of the GNU Affero ++ General Public License, section 13, concerning interaction through ++ a network will apply to the combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new ++ versions of the GNU General Public License from time to time. ++ Such new versions will be similar in spirit to the present ++ version, but may differ in detail to address new problems or ++ concerns. + + Each version is given a distinguishing version number. If the +- Program specifies a version number of this License which applies +- to it and "any later version", you have the option of following +- the terms and conditions either of that version or of any later +- version published by the Free Software Foundation. If the Program +- does not specify a version number of this License, you may choose ++ Program specifies that a certain numbered version of the GNU ++ General Public License "or any later version" applies to it, you ++ have the option of following the terms and conditions either of ++ that numbered version or of any later version published by the ++ Free Software Foundation. If the Program does not specify a ++ version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + +- 10. If you wish to incorporate parts of the Program into other free +- programs whose distribution conditions are different, write to the +- author to ask for permission. For software which is copyrighted +- by the Free Software Foundation, write to the Free Software +- Foundation; we sometimes make exceptions for this. Our decision +- will be guided by the two goals of preserving the free status of +- all derivatives of our free software and of promoting the sharing +- and reuse of software generally. ++ If the Program specifies that a proxy can decide which future ++ versions of the GNU General Public License can be used, that ++ proxy's public statement of acceptance of a version permanently ++ authorizes you to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++ permissions. However, no additional obligations are imposed on any ++ author or copyright holder as a result of your choosing to follow a ++ later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE ++ COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" ++ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, ++ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE ++ RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. ++ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL ++ NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ++ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES ++ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU ++ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR ++ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE ++ THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA ++ BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD ++ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF ++ THE POSSIBILITY OF SUCH DAMAGES. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++ above cannot be given local legal effect according to their terms, ++ reviewing courts shall apply local law that most closely ++ approximates an absolute waiver of all civil liability in ++ connection with the Program, unless a warranty or assumption of ++ liability accompanies a copy of the Program in return for a fee. + +- NO WARRANTY +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO +- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE +- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT +- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE +- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY +- SERVICING, REPAIR OR CORRECTION. + +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY +- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE +- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU +- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY +- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN +- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ++END OF TERMS AND CONDITIONS ++=========================== + +- END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + ============================================= + +@@ -32997,59 +33497,52 @@ + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. ++state the exclusion of warranty; and each file should have at least the ++"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. +- Copyright (C) YEAR NAME OF AUTHOR ++ Copyright (C) YEAR NAME OF AUTHOR + +- This program is free software; you can redistribute it and/or modify ++ This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. ++ the Free Software Foundation, either version 3 of the License, or (at ++ your option) any later version. + +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT 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 +- along with this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ along with this program. If not, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper + mail. + +- If the program is interactive, make it output a short notice like +-this when it starts in an interactive mode: ++ If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: + +- Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +- type `show w'. ++ PROGRAM Copyright (C) YEAR NAME OF AUTHOR ++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +-appropriate parts of the General Public License. Of course, the +-commands you use may be called something other than `show w' and `show +-c'; they could even be mouse-clicks or menu items - whatever suits your +-program. ++appropriate parts of the General Public License. Of course, your ++program's commands might be different; for a GUI interface, you would ++use an "about box". + + You should also get your employer (if you work as a programmer) or +-your school, if any, to sign a "copyright disclaimer" for the program, +-if necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- SIGNATURE OF TY COON, 1 April 1989 +- Ty Coon, President of Vice ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. For more information on this, and how to apply and follow ++the GNU GPL, see `http://www.gnu.org/licenses/'. + +- This General Public License does not permit incorporating your ++ The GNU General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the +-GNU Lesser General Public License instead of this License. ++GNU Lesser General Public License instead of this License. But first, ++please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + +  + File: gpc.info, Node: Library Copying, Next: Demo Copying, Prev: Copying, Up: Top +@@ -33593,7 +34086,7 @@ + + This demo program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +-published by the Free Software Foundation; either version 2, or (at ++published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This demo program is distributed in the hope that it will be useful, +@@ -35898,6 +36391,7 @@ + * Read: Read. (line 6) + * ReadLn: ReadLn. (line 6) + * ReadStr: ReadStr. (line 6) ++* ReadString: ReadString. (line 6) + * Real <1>: Real. (line 6) + * Real: Real Types. (line 6) + * record <1>: Keywords. (line 301) +@@ -36003,6 +36497,7 @@ + * String, Intrinsic, Data Types: String Types. (line 6) + * string, slice access: String Slice Access. (line 6) + * String2CString: String2CString. (line 6) ++* StringOf: StringOf. (line 6) + * Strings: Strings. (line 6) + * strings, operations: String Operations. (line 6) + * StringUtils: StringUtils. (line 6) +@@ -36131,591 +36626,593 @@ + Node: Welcome3363 + Node: Highlights8561 + Node: News20584 +-Node: FAQ35941 +-Node: GNU Pascal36632 +-Node: What and why36999 +-Node: Current version38919 +-Node: Turbo Pascal compatibility39806 +-Node: Supported platforms40681 +-Node: Installing GPC42200 +-Node: Documentation files42945 +-Node: Components43503 +-Node: Debugger44141 +-Node: Libraries46125 +-Node: Contributed units50124 +-Node: IDE50452 +-Node: GPC on DJGPP51706 +-Node: What is DJGPP52625 +-Node: DJGPP FAQ53167 +-Node: DJGPP download53658 +-Node: Installing GPC on DJGPP54379 +-Node: DJGPP Info reader56352 +-Node: DJGPP DPMI server56672 +-Node: Assembler syntax57107 +-Node: DJGPP specific code58611 +-Node: Stack size60999 +-Node: Strings in GPC62667 +-Node: String schema63213 +-Node: Strings in variant records64171 +-Node: Length byte66138 +-Node: Strings as value parameters66924 +-Node: Short strings67712 +-Node: C strings68632 +-Node: Getting Help70138 +-Node: Miscellaneous FAQ70838 +-Node: Contributing71106 +-Node: GPC web site71367 +-Node: About the FAQ71738 +-Node: Installation72539 +-Node: Download73080 +-Node: Binary Distributions78593 +-Node: Compiling GPC81221 +-Node: Compilation Notes91722 +-Node: MS-DOS with DJGPP92155 +-Node: MS-DOS or OS/2 with EMX93142 +-Node: MS Windows 95/98/NT93696 +-Node: Cross-Compilers94470 +-Node: Crossbuilding95880 +-Node: Invoking GPC96722 +-Node: GPC Command Line Options99080 +-Node: GPC Options116519 +-Node: Programming126370 +-Node: Source Structures128008 +-Node: The Program129115 +-Node: Label Declaration130697 +-Node: Constant Declaration131100 +-Node: Type Declaration135047 +-Node: Variable Declaration137845 +-Node: Subroutine Declaration139410 +-Node: The Procedure139694 +-Node: The Function140522 +-Node: The Operator141974 +-Node: Subroutine Parameter List Declaration142296 +-Node: Statements148246 +-Node: Assignment148680 +-Node: begin end Compound Statement149205 +-Node: if Statement149688 +-Node: case Statement150451 +-Node: for Statement152333 +-Node: while Statement154630 +-Node: repeat Statement155147 +-Node: asm Inline155692 +-Node: with Statement156145 +-Node: goto Statement156292 +-Node: Procedure Call156529 +-Node: The Declaring Statement156892 +-Node: Loop Control Statements158028 +-Node: Modules and Units158488 +-Node: Modules158806 +-Node: Units162727 +-Node: Data Types164923 +-Node: Type Definition165836 +-Node: Ordinal Types166350 +-Node: Integer Types167532 +-Node: Natural Integer Types168327 +-Node: Main Branch Integer Types169246 +-Node: Integer Types with Specified Size171433 +-Node: Integer Types and Compatibility172783 +-Node: Summary of Integer Types174291 +-Node: Real Types177009 +-Node: String Types178761 +-Node: Character Types179625 +-Node: Enumerated Types179926 +-Node: File Types180934 +-Node: Boolean (Intrinsic)181993 +-Node: Pointer (Intrinsic)182726 +-Node: Type Definition Possibilities183125 +-Node: Subrange Types183898 +-Node: Array Types185134 +-Node: Record Types186251 +-Node: Variant Records187703 +-Node: Schema Types188684 +-Node: Set Types195692 +-Node: Pointer Types196840 +-Node: Procedural Types198597 +-Node: Object Types201206 +-Node: Type Initializers201523 +-Node: Restricted Types203166 +-Node: Machine-dependencies in Types205347 +-Node: Endianness205661 +-Node: Alignment209270 +-Node: Operators209432 +-Node: Built-in Operators209772 +-Node: User-defined Operators210698 +-Node: Parameters212090 +-Node: Protected Parameters212486 +-Node: Conformant Arrays213274 +-Node: Open Arrays213563 +-Node: String Slice Access214339 +-Node: Pointer Arithmetics215659 +-Node: Type Casts216955 +-Node: OOP221267 +-Node: Compiler Directives226037 +-Node: Library Routines233964 +-Node: File Routines234563 +-Node: String Operations239977 +-Node: Accessing Command Line Arguments242592 +-Node: Memory Management Routines243425 +-Node: Operations for Integer and Ordinal Types244408 +-Node: Complex Number Operations245769 +-Node: Set Operations247824 +-Node: Date And Time Routines250103 +-Node: Other Languages250841 +-Node: Importing Libraries from Other Languages251767 +-Node: Exporting GPC Libraries to Other Languages255188 +-Node: Notes for Debugging257371 +-Node: I18N258421 +-Node: Run Time System262988 +-Node: GPC Units372059 +-Node: CRT374236 +-Node: Dos413203 +-Node: DosUnix422489 +-Node: FileUtils427594 +-Node: GMP434016 +-Node: GPCUtil465587 +-Node: HeapMon474008 +-Node: Intl477717 +-Node: MD5485628 +-Node: Overlay488502 +-Node: Pipes491049 +-Node: Ports501284 +-Node: Printer504946 +-Node: RegEx508961 +-Node: Strings521752 +-Node: StringUtils525166 +-Node: System538055 +-Node: TFDD553654 +-Node: Trap555745 +-Node: Turbo3560066 +-Node: WinDos562559 +-Node: Borland Pascal568899 +-Node: BP Compatibility570233 +-Node: BP Incompatibilities571630 +-Node: String type573491 +-Node: Qualified identifiers575602 +-Node: Assembler576000 +-Node: Move; FillChar577134 +-Node: Real type577778 +-Node: Graph unit578936 +-Node: OOP units580284 +-Node: Keep; GetIntVec; SetIntVec580652 +-Node: TFDDs581486 +-Node: Mem; Port; Ptr; Seg; Ofs; PrefixSeg; etc.581999 +-Node: Endianness assumptions583735 +-Node: - -borland-pascal - disable GPC extensions586596 +-Node: -w - disable all warnings587337 +-Node: - -uses=System - Swap; HeapError; etc.587816 +-Node: -D__BP_TYPE_SIZES__ - small integer types etc.588441 +-Node: - -pack-struct - disable structure alignment589188 +-Node: -D__BP_RANDOM__ - BP compatible pseudo random number generator589763 +-Node: -D__BP_UNPORTABLE_ROUTINES__ - Intr; DosVersion; etc.590804 +-Node: -D__BP_PARAMSTR_0__ - BP compatible ParamStr (0) behaviour592013 +-Node: IDE versus command line593350 +-Node: Comments598037 +-Node: BP Compatible Compiler Directives599459 +-Node: Units; GPI files and Automake599930 +-Node: Optimization602980 +-Node: Debugging603964 +-Node: Objects604867 +-Node: Strings in BP and GPC605430 +-Node: Typed Constants607495 +-Node: Bit; Byte and Memory Manipulation609171 +-Node: User-defined Operators in GPC612075 +-Node: Data Types in BP and GPC612800 +-Node: BP Procedural Types616367 +-Node: Files618314 +-Node: Built-in Constants619058 +-Node: Built-in Operators in BP and GPC619443 +-Node: Built-in Procedures and Functions620198 +-Node: Special Parameters621400 +-Node: Miscellaneous622599 +-Node: BP and Extended Pascal625015 +-Node: Portability hints627481 +-Node: Reference632953 +-Node: Abs637476 +-Node: absolute638667 +-Node: abstract641753 +-Node: Addr642091 +-Node: AlignOf643073 +-Node: all643957 +-Node: and644267 +-Node: and then646906 +-Node: and_then647739 +-Node: AnsiChar649816 +-Node: AnyFile650564 +-Node: Append652459 +-Node: ArcCos653895 +-Node: ArcSin654591 +-Node: ArcTan655295 +-Node: Arg656074 +-Node: array656768 +-Node: as657991 +-Node: asm658364 +-Node: asmname658798 +-Node: Assert659142 +-Node: Assign659912 +-Node: Assigned660321 +-Node: attribute661289 +-Node: begin663737 +-Node: Bind664606 +-Node: bindable665007 +-Node: Binding665412 +-Node: BindingType665823 +-Node: BitSizeOf668306 +-Node: BlockRead669462 +-Node: BlockWrite669938 +-Node: Boolean670425 +-Node: Break671225 +-Node: Byte672343 +-Node: ByteBool673204 +-Node: ByteCard674084 +-Node: ByteInt674904 +-Node: c675785 +-Node: Card676094 +-Node: Cardinal676688 +-Node: case677730 +-Node: CBoolean679931 +-Node: CCardinal680792 +-Node: Char681525 +-Node: ChDir682308 +-Node: Chr683146 +-Node: CInteger683738 +-Node: c_language684461 +-Node: class684799 +-Node: Close685136 +-Node: Cmplx685435 +-Node: Comp686003 +-Node: CompilerAssert686793 +-Node: Complex688455 +-Node: Concat689052 +-Node: Conjugate689437 +-Node: const690183 +-Node: constructor691845 +-Node: Continue692198 +-Node: Copy693134 +-Node: Cos694640 +-Node: CString695333 +-Node: CString2String695777 +-Node: CStringCopyString696136 +-Node: CurrentRoutineName696544 +-Node: CWord697197 +-Node: Cycle697959 +-Node: Date698868 +-Node: Dec699475 +-Node: DefineSize700884 +-Node: Delete701224 +-Node: destructor701696 +-Node: Discard702040 +-Node: Dispose703490 +-Node: div704037 +-Node: do704548 +-Node: Double705324 +-Node: downto705887 +-Node: else706440 +-Node: Empty707858 +-Node: end708177 +-Node: EOF709124 +-Node: EOLn709497 +-Node: EpsReal709875 +-Node: EQ710152 +-Node: EQPad710460 +-Node: Erase710762 +-Node: except711065 +-Node: Exclude711325 +-Node: Exit712222 +-Node: Exp713641 +-Node: export714467 +-Node: exports715667 +-Node: Extend715973 +-Node: Extended717448 +-Node: external717877 +-Node: Fail718281 +-Node: False718541 +-Node: far719407 +-Node: file720240 +-Node: FilePos720757 +-Node: FileSize721079 +-Node: FillChar721409 +-Node: finalization721821 +-Node: Finalize722253 +-Node: finally723048 +-Node: Flush723313 +-Node: for723615 +-Node: FormatString725256 +-Node: forward725541 +-Node: Frac725890 +-Node: FrameAddress727161 +-Node: FreeMem727447 +-Node: function728314 +-Node: GE728671 +-Node: GEPad728980 +-Node: Get729280 +-Node: GetMem729662 +-Node: GetTimeStamp730930 +-Node: goto731502 +-Node: GT731919 +-Node: GTPad732224 +-Node: Halt732525 +-Node: High733231 +-Node: if734647 +-Node: Im736143 +-Node: implementation736713 +-Node: import737084 +-Node: in739092 +-Node: Inc740164 +-Node: Include741631 +-Node: Index742522 +-Node: inherited742801 +-Node: initialization743203 +-Node: Initialize743650 +-Node: InOutRes744428 +-Node: Input744739 +-Node: Insert745077 +-Node: Int745415 +-Node: Integer746746 +-Node: interface747551 +-Node: interrupt747905 +-Node: IOResult748261 +-Node: is748566 +-Node: label748906 +-Node: LastPosition749276 +-Node: LE749635 +-Node: Leave749948 +-Node: Length751063 +-Node: LEPad751392 +-Node: library751700 +-Node: Ln752006 +-Node: LoCase752738 +-Node: LongBool753039 +-Node: LongCard753930 +-Node: LongestBool754745 +-Node: LongestCard755667 +-Node: LongestInt756468 +-Node: LongestReal757277 +-Node: LongestWord757774 +-Node: LongInt758595 +-Node: LongReal759476 +-Node: LongWord759909 +-Node: Low760727 +-Node: LT761956 +-Node: LTPad762260 +-Node: Mark762561 +-Node: Max762852 +-Node: MaxChar763164 +-Node: MaxInt763500 +-Node: MaxReal763919 +-Node: MedBool764221 +-Node: MedCard765098 +-Node: MedInt765978 +-Node: MedReal766814 +-Node: MedWord767227 +-Node: Min768109 +-Node: MinReal768424 +-Node: MkDir768721 +-Node: mod769542 +-Node: module769936 +-Node: Move770261 +-Node: MoveLeft770585 +-Node: MoveRight770925 +-Node: name771269 +-Node: NE774358 +-Node: near774662 +-Node: NEPad775490 +-Node: New775792 +-Node: NewCString776690 +-Node: nil777017 +-Node: not778493 +-Node: Null778968 +-Node: object780456 +-Node: Odd781268 +-Node: of781986 +-Node: on782426 +-Node: only782664 +-Node: operator782975 +-Node: or783279 +-Node: Ord785870 +-Node: or else786804 +-Node: or_else787604 +-Node: otherwise789545 +-Node: Output790949 +-Node: overload791295 +-Node: override791565 +-Node: Pack791901 +-Node: packed792388 +-Node: Page794147 +-Node: PAnsiChar794502 +-Node: ParamCount794965 +-Node: ParamStr795779 +-Node: PChar796617 +-Node: Pi797081 +-Node: PObjectType797336 +-Node: Pointer798812 +-Node: Polar799294 +-Node: Pos799615 +-Node: Position799929 +-Node: pow800267 +-Node: Pred800741 +-Node: private802762 +-Node: procedure803195 +-Node: program803562 +-Node: property803928 +-Node: protected804266 +-Node: PtrCard804830 +-Node: PtrDiffType805422 +-Node: PtrInt806127 +-Node: PtrWord806705 +-Node: public807290 +-Node: published807722 +-Node: Put808159 +-Node: qualified808548 +-Node: raise808877 +-Node: Random809139 +-Node: Randomize809405 +-Node: Re809677 +-Node: Read810181 +-Node: ReadLn810619 +-Node: ReadStr811015 +-Node: Real811350 +-Node: record811878 +-Node: Release814433 +-Node: Rename814739 +-Node: repeat815066 +-Node: Reset816094 +-Node: resident817403 +-Node: restricted817730 +-Node: Result818078 +-Node: Return818627 +-Node: ReturnAddress818897 +-Node: Rewrite819189 +-Node: RmDir821904 +-Node: Round822722 +-Node: RunError824323 +-Node: Seek824642 +-Node: SeekEOF824968 +-Node: SeekEOLn825288 +-Node: SeekRead825616 +-Node: SeekUpdate825980 +-Node: SeekWrite826353 +-Node: segment826721 +-Node: Self827032 +-Node: set827310 +-Node: SetFileTime828868 +-Node: SetLength829247 +-Node: SetType830345 +-Node: shl832913 +-Node: ShortBool833876 +-Node: ShortCard834771 +-Node: ShortInt835579 +-Node: ShortReal836431 +-Node: ShortWord836873 +-Node: shr837826 +-Node: Sin839012 +-Node: Single839703 +-Node: SizeOf840005 +-Node: SizeType840849 +-Node: SmallInt841407 +-Node: Sqr842163 +-Node: SqRt842998 +-Node: StandardError844030 +-Node: StandardInput844326 +-Node: StandardOutput844648 +-Node: StdErr844966 +-Node: Str845762 +-Node: String846531 +-Node: String2CString846823 +-Node: SubStr847176 +-Node: Succ848388 +-Node: Text850401 +-Node: then850912 +-Node: Time851492 +-Node: TimeStamp852104 +-Node: to854232 +-Node: to begin do854660 +-Node: to end do854977 +-Node: Trim855293 +-Node: True855606 +-Node: Trunc856470 +-Node: Truncate857859 +-Node: try858174 +-Node: type858422 +-Node: type of860950 +-Node: TypeOf861196 +-Node: Unbind862390 +-Node: unit862780 +-Node: Unpack863092 +-Node: until863588 +-Node: UpCase864016 +-Node: Update864322 +-Node: uses864641 +-Node: Val866098 +-Node: value867982 +-Node: var868518 +-Node: view870851 +-Node: virtual871198 +-Node: Void871541 +-Node: while872017 +-Node: with872956 +-Node: Word873368 +-Node: WordBool874186 +-Node: Write875063 +-Node: WriteLn875561 +-Node: WriteStr876011 +-Node: xor876375 +-Node: Keywords877873 +-Node: Support888099 +-Node: Mailing List889701 +-Node: Mailing List Archives891935 +-Node: Newsgroups892604 +-Node: Professional Support893865 +-Node: Compiler Crashes894608 +-Node: Reporting Bugs895242 +-Node: Testing906819 +-Node: To Do908761 +-Node: Known Bugs910407 +-Node: Planned Features911603 +-Node: Planned - Strings912609 +-Node: Planned - OOP914531 +-Node: Planned - Other types916581 +-Node: Planned - Misc917758 +-Node: Planned - Utilities919654 +-Node: Fixed Bugs920203 +-Node: Internals943412 +-Node: Preprocessor946968 +-Node: Lexical analyzer949435 +-Node: Lexer problems950385 +-Node: BP character constants953481 +-Node: Compiler directives internally958734 +-Node: Syntax parsing962093 +-Node: Parsing conflicts965626 +-Node: Parsing keywords968818 +-Node: forward near far971385 +-Node: Tree nodes972717 +-Node: Parameter passing977516 +-Node: GPI files979980 +-Node: Automake992812 +-Node: File Layout995359 +-Node: Planned996142 +-Node: Copying1000210 +-Node: Library Copying1019395 +-Node: Demo Copying1047545 +-Node: Acknowledgments1049174 +-Node: Resources1063995 +-Node: GNU1069321 +-Node: Manifesto1072855 +-Node: Gnu is Not Unix1074151 +-Ref: Gnu is Not Unix-Footnote-11076513 +-Node: Why GNU1077403 +-Node: GNU Unix Compatibility1078479 +-Node: GNU Availability1078931 +-Node: Why Help GNU1079399 +-Node: How To Contribute to GNU1080802 +-Node: GNU Benefits1082630 +-Ref: GNU Benefits-Footnote-11084891 +-Node: Objections to GNU1085165 +-Ref: Objections to GNU-Footnote-11099672 +-Ref: Objections to GNU-Footnote-21099714 +-Ref: Objections to GNU-Footnote-31100234 +-Node: Funding1100340 +-Node: Index-GPC1102818 ++Node: FAQ36309 ++Node: GNU Pascal37000 ++Node: What and why37367 ++Node: Current version39287 ++Node: Turbo Pascal compatibility40174 ++Node: Supported platforms41049 ++Node: Installing GPC42568 ++Node: Documentation files43313 ++Node: Components43871 ++Node: Debugger44509 ++Node: Libraries46493 ++Node: Contributed units50492 ++Node: IDE50820 ++Node: GPC on DJGPP52074 ++Node: What is DJGPP52993 ++Node: DJGPP FAQ53535 ++Node: DJGPP download54026 ++Node: Installing GPC on DJGPP54747 ++Node: DJGPP Info reader56720 ++Node: DJGPP DPMI server57040 ++Node: Assembler syntax57475 ++Node: DJGPP specific code58979 ++Node: Stack size61367 ++Node: Strings in GPC63035 ++Node: String schema63581 ++Node: Strings in variant records64539 ++Node: Length byte66506 ++Node: Strings as value parameters67292 ++Node: Short strings68080 ++Node: C strings69000 ++Node: Getting Help70506 ++Node: Miscellaneous FAQ71206 ++Node: Contributing71474 ++Node: GPC web site71735 ++Node: About the FAQ72106 ++Node: Installation72907 ++Node: Download73448 ++Node: Binary Distributions78961 ++Node: Compiling GPC81589 ++Node: Compilation Notes92090 ++Node: MS-DOS with DJGPP92523 ++Node: MS-DOS or OS/2 with EMX93510 ++Node: MS Windows 95/98/NT94064 ++Node: Cross-Compilers94838 ++Node: Crossbuilding96248 ++Node: Invoking GPC97090 ++Node: GPC Command Line Options99448 ++Node: GPC Options116887 ++Node: Programming126738 ++Node: Source Structures128376 ++Node: The Program129483 ++Node: Label Declaration131065 ++Node: Constant Declaration131468 ++Node: Type Declaration135415 ++Node: Variable Declaration138213 ++Node: Subroutine Declaration139778 ++Node: The Procedure140062 ++Node: The Function140890 ++Node: The Operator142342 ++Node: Subroutine Parameter List Declaration142664 ++Node: Statements148614 ++Node: Assignment149048 ++Node: begin end Compound Statement149573 ++Node: if Statement150056 ++Node: case Statement150819 ++Node: for Statement152701 ++Node: while Statement154998 ++Node: repeat Statement155515 ++Node: asm Inline156060 ++Node: with Statement156513 ++Node: goto Statement156660 ++Node: Procedure Call156897 ++Node: The Declaring Statement157260 ++Node: Loop Control Statements158396 ++Node: Modules and Units158856 ++Node: Modules159174 ++Node: Units163095 ++Node: Data Types165291 ++Node: Type Definition166204 ++Node: Ordinal Types166718 ++Node: Integer Types167900 ++Node: Natural Integer Types168695 ++Node: Main Branch Integer Types169614 ++Node: Integer Types with Specified Size171801 ++Node: Integer Types and Compatibility173151 ++Node: Summary of Integer Types174659 ++Node: Real Types177377 ++Node: String Types179129 ++Node: Character Types179993 ++Node: Enumerated Types180294 ++Node: File Types181302 ++Node: Boolean (Intrinsic)182361 ++Node: Pointer (Intrinsic)183094 ++Node: Type Definition Possibilities183493 ++Node: Subrange Types184266 ++Node: Array Types185502 ++Node: Record Types186619 ++Node: Variant Records188071 ++Node: Schema Types189052 ++Node: Set Types196060 ++Node: Pointer Types197208 ++Node: Procedural Types198965 ++Node: Object Types201574 ++Node: Type Initializers201891 ++Node: Restricted Types203534 ++Node: Machine-dependencies in Types205715 ++Node: Endianness206029 ++Node: Alignment209638 ++Node: Operators209800 ++Node: Built-in Operators210140 ++Node: User-defined Operators211066 ++Node: Parameters212458 ++Node: Protected Parameters212854 ++Node: Conformant Arrays213642 ++Node: Open Arrays213931 ++Node: String Slice Access214707 ++Node: Pointer Arithmetics216027 ++Node: Type Casts217323 ++Node: OOP221635 ++Node: Compiler Directives226405 ++Node: Library Routines234332 ++Node: File Routines234931 ++Node: String Operations240345 ++Node: Accessing Command Line Arguments242960 ++Node: Memory Management Routines243793 ++Node: Operations for Integer and Ordinal Types244776 ++Node: Complex Number Operations246137 ++Node: Set Operations248192 ++Node: Date And Time Routines250471 ++Node: Other Languages251209 ++Node: Importing Libraries from Other Languages252135 ++Node: Exporting GPC Libraries to Other Languages255556 ++Node: Notes for Debugging257739 ++Node: I18N258789 ++Node: Run Time System263356 ++Node: GPC Units373659 ++Node: CRT375836 ++Node: Dos414803 ++Node: DosUnix424089 ++Node: FileUtils429194 ++Node: GMP435616 ++Node: GPCUtil467187 ++Node: HeapMon475608 ++Node: Intl479317 ++Node: MD5487228 ++Node: Overlay490102 ++Node: Pipes492649 ++Node: Ports502884 ++Node: Printer506546 ++Node: RegEx510561 ++Node: Strings523352 ++Node: StringUtils526766 ++Node: System539655 ++Node: TFDD555254 ++Node: Trap557345 ++Node: Turbo3561666 ++Node: WinDos564159 ++Node: Borland Pascal570499 ++Node: BP Compatibility571833 ++Node: BP Incompatibilities573230 ++Node: String type575091 ++Node: Qualified identifiers577202 ++Node: Assembler577600 ++Node: Move; FillChar578734 ++Node: Real type579378 ++Node: Graph unit580536 ++Node: OOP units581884 ++Node: Keep; GetIntVec; SetIntVec582252 ++Node: TFDDs583086 ++Node: Mem; Port; Ptr; Seg; Ofs; PrefixSeg; etc.583599 ++Node: Endianness assumptions585335 ++Node: - -borland-pascal - disable GPC extensions588196 ++Node: -w - disable all warnings588937 ++Node: - -uses=System - Swap; HeapError; etc.589416 ++Node: -D__BP_TYPE_SIZES__ - small integer types etc.590041 ++Node: - -pack-struct - disable structure alignment590788 ++Node: -D__BP_RANDOM__ - BP compatible pseudo random number generator591363 ++Node: -D__BP_UNPORTABLE_ROUTINES__ - Intr; DosVersion; etc.592404 ++Node: -D__BP_PARAMSTR_0__ - BP compatible ParamStr (0) behaviour593613 ++Node: IDE versus command line594950 ++Node: Comments599637 ++Node: BP Compatible Compiler Directives601059 ++Node: Units; GPI files and Automake601530 ++Node: Optimization604580 ++Node: Debugging605564 ++Node: Objects606467 ++Node: Strings in BP and GPC607030 ++Node: Typed Constants609095 ++Node: Bit; Byte and Memory Manipulation610771 ++Node: User-defined Operators in GPC613675 ++Node: Data Types in BP and GPC614400 ++Node: BP Procedural Types617967 ++Node: Files619914 ++Node: Built-in Constants620658 ++Node: Built-in Operators in BP and GPC621043 ++Node: Built-in Procedures and Functions621798 ++Node: Special Parameters623000 ++Node: Miscellaneous624199 ++Node: BP and Extended Pascal626615 ++Node: Portability hints629081 ++Node: Reference634553 ++Node: Abs639104 ++Node: absolute640295 ++Node: abstract643381 ++Node: Addr643719 ++Node: AlignOf644701 ++Node: all645585 ++Node: and645895 ++Node: and then648534 ++Node: and_then649367 ++Node: AnsiChar651444 ++Node: AnyFile652192 ++Node: Append654087 ++Node: ArcCos655523 ++Node: ArcSin656219 ++Node: ArcTan656923 ++Node: Arg657702 ++Node: array658396 ++Node: as659619 ++Node: asm659992 ++Node: asmname660426 ++Node: Assert660770 ++Node: Assign661540 ++Node: Assigned661949 ++Node: attribute662917 ++Node: begin665365 ++Node: Bind666234 ++Node: bindable666635 ++Node: Binding667040 ++Node: BindingType667451 ++Node: BitSizeOf669934 ++Node: BlockRead671090 ++Node: BlockWrite671566 ++Node: Boolean672053 ++Node: Break672853 ++Node: Byte673971 ++Node: ByteBool674832 ++Node: ByteCard675712 ++Node: ByteInt676532 ++Node: c677413 ++Node: Card677722 ++Node: Cardinal678316 ++Node: case679358 ++Node: CBoolean681559 ++Node: CCardinal682420 ++Node: Char683153 ++Node: ChDir683936 ++Node: Chr684774 ++Node: CInteger685366 ++Node: c_language686089 ++Node: class686427 ++Node: Close686764 ++Node: Cmplx687063 ++Node: Comp687631 ++Node: CompilerAssert688421 ++Node: Complex690083 ++Node: Concat690680 ++Node: Conjugate691065 ++Node: const691811 ++Node: constructor693473 ++Node: Continue693826 ++Node: Copy694762 ++Node: Cos696268 ++Node: CString696961 ++Node: CString2String697405 ++Node: CStringCopyString697764 ++Node: CurrentRoutineName698172 ++Node: CWord698825 ++Node: Cycle699587 ++Node: Date700496 ++Node: Dec701103 ++Node: DefineSize702512 ++Node: Delete702852 ++Node: destructor703324 ++Node: Discard703668 ++Node: Dispose705118 ++Node: div705665 ++Node: do706176 ++Node: Double706952 ++Node: downto707515 ++Node: else708068 ++Node: Empty709486 ++Node: end709805 ++Node: EOF710752 ++Node: EOLn711125 ++Node: EpsReal711503 ++Node: EQ711780 ++Node: EQPad712088 ++Node: Erase712390 ++Node: except712693 ++Node: Exclude712953 ++Node: Exit713850 ++Node: Exp715269 ++Node: export716095 ++Node: exports717295 ++Node: Extend717601 ++Node: Extended719076 ++Node: external719505 ++Node: Fail719909 ++Node: False720169 ++Node: far721035 ++Node: file721868 ++Node: FilePos722385 ++Node: FileSize722707 ++Node: FillChar723037 ++Node: finalization723449 ++Node: Finalize723881 ++Node: finally724676 ++Node: Flush724941 ++Node: for725243 ++Node: FormatString726884 ++Node: forward727169 ++Node: Frac727518 ++Node: FrameAddress728789 ++Node: FreeMem729075 ++Node: function729942 ++Node: GE730299 ++Node: GEPad730608 ++Node: Get730908 ++Node: GetMem731290 ++Node: GetTimeStamp732558 ++Node: goto733130 ++Node: GT733547 ++Node: GTPad733852 ++Node: Halt734153 ++Node: High734859 ++Node: if736275 ++Node: Im737771 ++Node: implementation738341 ++Node: import738712 ++Node: in740720 ++Node: Inc741792 ++Node: Include743259 ++Node: Index744150 ++Node: inherited744429 ++Node: initialization744831 ++Node: Initialize745278 ++Node: InOutRes746056 ++Node: Input746367 ++Node: Insert746705 ++Node: Int747043 ++Node: Integer748374 ++Node: interface749179 ++Node: interrupt749533 ++Node: IOResult749889 ++Node: is750194 ++Node: label750534 ++Node: LastPosition750904 ++Node: LE751263 ++Node: Leave751576 ++Node: Length752691 ++Node: LEPad753020 ++Node: library753328 ++Node: Ln753634 ++Node: LoCase754366 ++Node: LongBool754667 ++Node: LongCard755558 ++Node: LongestBool756373 ++Node: LongestCard757295 ++Node: LongestInt758096 ++Node: LongestReal758905 ++Node: LongestWord759402 ++Node: LongInt760223 ++Node: LongReal761104 ++Node: LongWord761537 ++Node: Low762355 ++Node: LT763584 ++Node: LTPad763888 ++Node: Mark764189 ++Node: Max764480 ++Node: MaxChar764792 ++Node: MaxInt765128 ++Node: MaxReal765547 ++Node: MedBool765849 ++Node: MedCard766726 ++Node: MedInt767606 ++Node: MedReal768442 ++Node: MedWord768855 ++Node: Min769737 ++Node: MinReal770052 ++Node: MkDir770349 ++Node: mod771170 ++Node: module771564 ++Node: Move771889 ++Node: MoveLeft772213 ++Node: MoveRight772553 ++Node: name772897 ++Node: NE775986 ++Node: near776290 ++Node: NEPad777118 ++Node: New777420 ++Node: NewCString778318 ++Node: nil778645 ++Node: not780121 ++Node: Null780596 ++Node: object782084 ++Node: Odd782896 ++Node: of783614 ++Node: on784054 ++Node: only784292 ++Node: operator784603 ++Node: or784907 ++Node: Ord787498 ++Node: or else788432 ++Node: or_else789232 ++Node: otherwise791173 ++Node: Output792577 ++Node: overload792923 ++Node: override793193 ++Node: Pack793529 ++Node: packed794016 ++Node: Page795775 ++Node: PAnsiChar796130 ++Node: ParamCount796593 ++Node: ParamStr797407 ++Node: PChar798245 ++Node: Pi798709 ++Node: PObjectType798964 ++Node: Pointer800574 ++Node: Polar801056 ++Node: Pos801377 ++Node: Position801691 ++Node: pow802029 ++Node: Pred802503 ++Node: private804524 ++Node: procedure804957 ++Node: program805324 ++Node: property805690 ++Node: protected806028 ++Node: PtrCard806592 ++Node: PtrDiffType807184 ++Node: PtrInt807889 ++Node: PtrWord808467 ++Node: public809052 ++Node: published809484 ++Node: Put809921 ++Node: qualified810310 ++Node: raise810639 ++Node: Random810901 ++Node: Randomize811167 ++Node: Re811439 ++Node: Read811943 ++Node: ReadLn812381 ++Node: ReadStr812777 ++Node: ReadString813118 ++Node: Real813405 ++Node: record813936 ++Node: Release816491 ++Node: Rename816797 ++Node: repeat817124 ++Node: Reset818152 ++Node: resident819461 ++Node: restricted819788 ++Node: Result820136 ++Node: Return820685 ++Node: ReturnAddress820955 ++Node: Rewrite821247 ++Node: RmDir823962 ++Node: Round824780 ++Node: RunError826381 ++Node: Seek826700 ++Node: SeekEOF827026 ++Node: SeekEOLn827346 ++Node: SeekRead827674 ++Node: SeekUpdate828038 ++Node: SeekWrite828411 ++Node: segment828779 ++Node: Self829090 ++Node: set829368 ++Node: SetFileTime830926 ++Node: SetLength831305 ++Node: SetType832403 ++Node: shl834971 ++Node: ShortBool835934 ++Node: ShortCard836829 ++Node: ShortInt837637 ++Node: ShortReal838489 ++Node: ShortWord838931 ++Node: shr839884 ++Node: Sin841070 ++Node: Single841761 ++Node: SizeOf842063 ++Node: SizeType842907 ++Node: SmallInt843465 ++Node: Sqr844221 ++Node: SqRt845056 ++Node: StandardError846088 ++Node: StandardInput846384 ++Node: StandardOutput846706 ++Node: StdErr847024 ++Node: Str847820 ++Node: String848589 ++Node: String2CString848881 ++Node: StringOf849236 ++Node: SubStr849861 ++Node: Succ851067 ++Node: Text853080 ++Node: then853591 ++Node: Time854171 ++Node: TimeStamp854783 ++Node: to856911 ++Node: to begin do857339 ++Node: to end do857656 ++Node: Trim857972 ++Node: True858285 ++Node: Trunc859149 ++Node: Truncate860538 ++Node: try860853 ++Node: type861101 ++Node: type of863629 ++Node: TypeOf863875 ++Node: Unbind865069 ++Node: unit865459 ++Node: Unpack865771 ++Node: until866267 ++Node: UpCase866695 ++Node: Update867001 ++Node: uses867320 ++Node: Val868777 ++Node: value870661 ++Node: var871197 ++Node: view873530 ++Node: virtual873877 ++Node: Void874220 ++Node: while874696 ++Node: with875635 ++Node: Word876047 ++Node: WordBool876865 ++Node: Write877742 ++Node: WriteLn878240 ++Node: WriteStr878690 ++Node: xor879054 ++Node: Keywords880552 ++Node: Support890782 ++Node: Mailing List892384 ++Node: Mailing List Archives894618 ++Node: Newsgroups895287 ++Node: Professional Support896548 ++Node: Compiler Crashes897291 ++Node: Reporting Bugs897925 ++Node: Testing909502 ++Node: To Do911444 ++Node: Known Bugs913090 ++Node: Planned Features914286 ++Node: Planned - Strings915292 ++Node: Planned - OOP917214 ++Node: Planned - Other types919264 ++Node: Planned - Misc920441 ++Node: Planned - Utilities922337 ++Node: Fixed Bugs922886 ++Node: Internals947211 ++Node: Preprocessor950767 ++Node: Lexical analyzer953234 ++Node: Lexer problems954184 ++Node: BP character constants957280 ++Node: Compiler directives internally962533 ++Node: Syntax parsing965892 ++Node: Parsing conflicts969425 ++Node: Parsing keywords972617 ++Node: forward near far975184 ++Node: Tree nodes976516 ++Node: Parameter passing981315 ++Node: GPI files983779 ++Node: Automake996611 ++Node: File Layout999158 ++Node: Planned999941 ++Node: Copying1004009 ++Node: Library Copying1041573 ++Node: Demo Copying1069723 ++Node: Acknowledgments1071352 ++Node: Resources1086173 ++Node: GNU1091499 ++Node: Manifesto1095033 ++Node: Gnu is Not Unix1096329 ++Ref: Gnu is Not Unix-Footnote-11098691 ++Node: Why GNU1099581 ++Node: GNU Unix Compatibility1100657 ++Node: GNU Availability1101109 ++Node: Why Help GNU1101577 ++Node: How To Contribute to GNU1102980 ++Node: GNU Benefits1104808 ++Ref: GNU Benefits-Footnote-11107069 ++Node: Objections to GNU1107343 ++Ref: Objections to GNU-Footnote-11121850 ++Ref: Objections to GNU-Footnote-21121892 ++Ref: Objections to GNU-Footnote-31122412 ++Node: Funding1122518 ++Node: Index-GPC1124996 +  + End Tag Table +diff -urN gpc-20060325/p/doc/info/gpcs-de.info gpc-20070904/p/doc/info/gpcs-de.info +--- gpc-20060325/p/doc/info/gpcs-de.info 2006-03-25 03:25:20.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpcs-de.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-Dies ist ../../gcc-4.0.2/gcc/p/doc/info/gpcs-de.info, hergestellt von ++Dies ist ../../gcc-3.4.6/gcc/p/doc/info/gpcs-de.info, hergestellt von + Makeinfo Version 4.7 aus gpcs.texi. + + START-INFO-DIR-ENTRY +diff -urN gpc-20060325/p/doc/info/gpcs-es.info gpc-20070904/p/doc/info/gpcs-es.info +--- gpc-20060325/p/doc/info/gpcs-es.info 2006-03-25 03:25:22.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpcs-es.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-This is ../../gcc-4.0.2/gcc/p/doc/info/gpcs-es.info, produced by ++This is ../../gcc-3.4.6/gcc/p/doc/info/gpcs-es.info, produced by + makeinfo version 4.7 from gpcs.texi. + + START-INFO-DIR-ENTRY +diff -urN gpc-20060325/p/doc/info/gpcs-hr.info gpc-20070904/p/doc/info/gpcs-hr.info +--- gpc-20060325/p/doc/info/gpcs-hr.info 2006-03-25 03:25:21.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpcs-hr.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-This is ../../gcc-4.0.2/gcc/p/doc/info/gpcs-hr.info, produced by ++This is ../../gcc-3.4.6/gcc/p/doc/info/gpcs-hr.info, produced by + makeinfo version 4.7 from gpcs.texi. + + START-INFO-DIR-ENTRY +diff -urN gpc-20060325/p/doc/info/gpcs.info gpc-20070904/p/doc/info/gpcs.info +--- gpc-20060325/p/doc/info/gpcs.info 2006-03-25 03:25:20.000000000 +0100 ++++ gpc-20070904/p/doc/info/gpcs.info 2007-09-04 08:22:54.000000000 +0200 +@@ -1,4 +1,4 @@ +-This is ../../gcc-4.0.2/gcc/p/doc/info/gpcs.info, produced by makeinfo ++This is ../../gcc-3.4.6/gcc/p/doc/info/gpcs.info, produced by makeinfo + version 4.7 from gpcs.texi. + + START-INFO-DIR-ENTRY +diff -urN gpc-20060325/p/doc/texinfo.tex gpc-20070904/p/doc/texinfo.tex +--- gpc-20060325/p/doc/texinfo.tex 2002-09-23 09:39:12.000000000 +0200 ++++ gpc-20070904/p/doc/texinfo.tex 2007-09-04 08:22:53.000000000 +0200 +@@ -10,7 +10,7 @@ + % + % This texinfo.tex file is free software; you can redistribute it and/or + % modify it under the terms of the GNU General Public License as +-% published by the Free Software Foundation; either version 2, or (at ++% published by the Free Software Foundation; either version 3, or (at + % your option) any later version. + % + % This texinfo.tex file is distributed in the hope that it will be +diff -urN gpc-20060325/p/expressions.c gpc-20070904/p/expressions.c +--- gpc-20060325/p/expressions.c 2006-03-24 02:47:15.000000000 +0100 ++++ gpc-20070904/p/expressions.c 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -36,7 +36,6 @@ + static int implicit_comparison = 0; + int operators_defined = 0; + +-static void set_string_length (tree, int, int); + static void warn_operands (enum tree_code, tree, int); + static tree shorten_compare (tree *, tree *, tree *, enum tree_code *); + static const char *get_op_name (enum tree_code); +@@ -56,7 +55,7 @@ + Note: TREE_STRING_LENGTH includes a trailing #0 (to output C-compatible + strings and to avoid changing the backend's output code), but the domain + doesn't (so the #0 doesn't appear in Pascal string usage). */ +-static void ++void + set_string_length (tree value, int wide_flag, int length) + { + gcc_assert (length >= 0); +@@ -282,7 +281,7 @@ + { + if (co->pascal_dialect & C_E_O_PASCAL) + { +- warning(msg); ++ gpc_warning (msg); + return build (COMPOUND_EXPR, TREE_TYPE (min), + build_predef_call (p_RangeCheckError, NULL_TREE), min); + } +@@ -367,8 +366,21 @@ + the values might be out of range already. So we need to get the base-types + *and* always convert to the larger type (since converting a negative value + to Char would still overflow. */ +- ttype = base_type (type); + stype = base_type (TREE_TYPE (expr)); ++ ttype = base_type (type); ++ /* @@@@ Strictly speaking enumeral type may have so many values ++ that it does not fit into integer, but we disregard this... */ ++ if (TREE_CODE (ttype) == ENUMERAL_TYPE) ++ { ++ if (TYPE_PRECISION (integer_type_node) > TYPE_PRECISION (stype)) ++ stype = integer_type_node; ++ return convert (type, range_check_2 ( ++ convert (stype, TYPE_MIN_VALUE (type)), ++ convert (stype, TYPE_MAX_VALUE (type)), ++ convert (stype, expr))); ++ } ++ /* @@@@ The code below may still get checks wrong due to signed/unsigned ++ convertion */ + if (TYPE_PRECISION (ttype) >= TYPE_PRECISION (stype)) + return convert (type, range_check (type, convert (ttype, expr))); + else +@@ -653,7 +665,7 @@ + enum tree_code inner = EXP_ORIGINAL_CODE (exp_inner); + if ((AND_OP (inner) && OR_OP (outer)) + || ((OR_OP (inner) || AND_OP (inner) || (!rhs && inner == TRUTH_NOT_EXPR)) && REL_OP (outer))) +- warning ("suggest parentheses around `%s' in operand of `%s'", ++ gpc_warning ("suggest parentheses around `%s' in operand of `%s'", + get_op_name (inner), get_op_name (outer)); + } + } +@@ -783,7 +795,6 @@ + and are already no lvalues (WRT ISO parentheses). */ + gcc_assert (TREE_CODE (t) != STRING_CST); + gcc_assert (TREE_CODE (t) != CONSTRUCTOR); +- gcc_assert (code == NOP_EXPR || !lvalue_p (t)); + t = build1 (NON_LVALUE_EXPR, TREE_TYPE (old), old); + TREE_CONSTANT (t) = TREE_CONSTANT (old); + TREE_OVERFLOW (t) = TREE_OVERFLOW (old); +@@ -1124,9 +1135,11 @@ + } + + /* Convert set constructors to sets. */ +- if (t1 == CONSTRUCTOR && TREE_CODE (TREE_TYPE (exp1)) == SET_TYPE) ++ if (t1 == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (TREE_TYPE (exp1)) == SET_TYPE) + exp1 = construct_set (exp1, NULL_TREE, 1); +- if (t2 == CONSTRUCTOR && TREE_CODE (TREE_TYPE (exp2)) == SET_TYPE && code != IN_EXPR) ++ if (t2 == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (TREE_TYPE (exp2)) == SET_TYPE && code != IN_EXPR) + exp2 = construct_set (exp2, NULL_TREE, 1); + + CHK_EM (TREE_TYPE (exp1)); +@@ -1249,17 +1262,18 @@ + return error_mark_node; + } + +- if (TREE_CODE (exp2) == CONSTRUCTOR) ++ if (TREE_CODE (exp2) == PASCAL_SET_CONSTRUCTOR) + { + /* Optimize `foo in [a, b .. c]' to become + `(foo = a) or ((foo >= b) and (foo <= c))' + (where foo is evaluated only once). */ +- tree elem = CONSTRUCTOR_ELTS (exp2), result = NULL_TREE, exp = save_expr (exp1); ++ tree elem = SET_CONSTRUCTOR_ELTS (exp2), ++ result = NULL_TREE, exp = save_expr (exp1); + if (!elem) + { +- warning ("`... in []' (empty set) is always `False'."); ++ gpc_warning ("`... in []' (empty set) is always `False'."); + if (TREE_SIDE_EFFECTS (exp1)) +- warning (" Operand with side-effects is not evaluated."); ++ gpc_warning (" Operand with side-effects is not evaluated."); + return boolean_false_node; + } + for (; elem; elem = TREE_CHAIN (elem)) +@@ -1333,12 +1347,18 @@ + if (code == SYMDIFF_EXPR) + chk_dialect ("symmetric set difference is", E_O_PASCAL); + +- if (TREE_CODE (exp1) == CONSTRUCTOR && TREE_CODE (exp2) == CONSTRUCTOR) ++ if (TREE_CODE (exp1) == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (exp2) == PASCAL_SET_CONSTRUCTOR) + { + if (code == PLUS_EXPR) +- return build_set_constructor (chainon (copy_list (CONSTRUCTOR_ELTS (exp1)), copy_list (CONSTRUCTOR_ELTS (exp2)))); +- else if (PASCAL_CONSTRUCTOR_INT_CST (exp1) && PASCAL_CONSTRUCTOR_INT_CST (exp2)) +- return const_set_constructor_binary_op (code, CONSTRUCTOR_ELTS (exp1), CONSTRUCTOR_ELTS (exp2)); ++ return build_set_constructor (chainon ( ++ copy_list (SET_CONSTRUCTOR_ELTS (exp1)), ++ copy_list (SET_CONSTRUCTOR_ELTS (exp2)))); ++ else if (PASCAL_CONSTRUCTOR_INT_CST (exp1) ++ && PASCAL_CONSTRUCTOR_INT_CST (exp2)) ++ return const_set_constructor_binary_op (code, ++ SET_CONSTRUCTOR_ELTS (exp1), ++ SET_CONSTRUCTOR_ELTS (exp2)); + } + + result = NULL_TREE; +@@ -1351,19 +1371,19 @@ + { + case PLUS_EXPR: + case SYMDIFF_EXPR: +- warning ("Set operation has no effect."); ++ gpc_warning ("Set operation has no effect."); + return exp2; + case MINUS_EXPR: + case MULT_EXPR: +- warning ("Set operation always yields the empty set."); ++ gpc_warning ("Set operation always yields the empty set."); + result = build_set_constructor (NULL_TREE); + break; + case GT_EXPR: +- warning ("`>' comparison of the empty set is always false."); ++ gpc_warning ("`>' comparison of the empty set is always false."); + result = boolean_false_node; + break; + case LE_EXPR: +- warning ("`<=' comparison of the empty set is always true."); ++ gpc_warning ("`<=' comparison of the empty set is always true."); + result = boolean_true_node; + break; + case EQ_EXPR: +@@ -1389,18 +1409,18 @@ + case PLUS_EXPR: + case MINUS_EXPR: + case SYMDIFF_EXPR: +- warning ("Set operation has no effect."); ++ gpc_warning ("Set operation has no effect."); + return exp1; + case MULT_EXPR: +- warning ("Set operation always yields the empty set."); ++ gpc_warning ("Set operation always yields the empty set."); + result = build_set_constructor (NULL_TREE); + break; + case LT_EXPR: +- warning ("`<' comparison against the empty set is always false."); ++ gpc_warning ("`<' comparison against the empty set is always false."); + result = boolean_false_node; + break; + case GE_EXPR: +- warning ("`>=' comparison against the empty set is always true."); ++ gpc_warning ("`>=' comparison against the empty set is always true."); + result = boolean_true_node; + break; + case EQ_EXPR: +@@ -1417,7 +1437,7 @@ + if (result) + { + if (TREE_SIDE_EFFECTS (empty1 ? exp2 : exp1)) +- warning (" Operand with side-effects is not evaluated."); ++ gpc_warning (" Operand with side-effects is not evaluated."); + return result; + } + if (!r_num) +@@ -1827,7 +1847,8 @@ + /* build_unary_op accepts CONSTRUCTORs (for parameters), but the backend + would later crash. Maybe it should be checked elsewhere, but it + seems to work here. -- Frank */ +- if (TREE_CODE (factor) == CONSTRUCTOR) ++ if (TREE_CODE (factor) == CONSTRUCTOR ++ || TREE_CODE (factor) == PASCAL_SET_CONSTRUCTOR) + { + error ("reference expected, value given"); + return error_mark_node; +@@ -1841,6 +1862,7 @@ + else + { + tree t; ++ tree string_cst_type = NULL_TREE; + + if (TREE_CODE (factor) == STRING_CST) + { +@@ -1850,13 +1872,25 @@ + tree capf = TYPE_FIELDS (st); + tree lenf = TREE_CHAIN (capf); + tree schf = TREE_CHAIN (lenf); ++#ifndef GCC_4_1 ++ tree inilist = tree_cons (capf, length, ++ tree_cons (lenf, length, ++ build_tree_list (schf, factor))); ++#else ++ VEC(constructor_elt,gc) * inilist = 0; ++ CONSTRUCTOR_APPEND_ELT (inilist, capf, length); ++ CONSTRUCTOR_APPEND_ELT (inilist, lenf, length); ++ CONSTRUCTOR_APPEND_ELT (inilist, schf, factor); ++#endif + factor = build_constructor (build_pascal_string_schema (length), +- tree_cons (capf, length, +- tree_cons (lenf, length, +- build_tree_list (schf, factor)))); ++ inilist); + /* Make this a valid lvalue for taking addresses. */ + TREE_CONSTANT (factor) = 1; + TREE_STATIC (factor) = 1; ++ string_cst_type = TREE_TYPE (factor); ++ factor = declare_variable (get_unique_identifier ("const_string"), ++ TREE_TYPE (factor), build_tree_list (NULL_TREE, factor), ++ VQ_IMPLICIT | VQ_CONST | VQ_STATIC); + } + + t = factor; +@@ -1883,6 +1917,12 @@ + && (!DECL_CONTEXT (factor) + || (TREE_CODE (factor) == FUNCTION_DECL && DECL_NO_STATIC_CHAIN (factor)))) + TREE_CONSTANT (result) = 1; ++#if 0 ++ if (string_cst_type) ++ { ++ result = convert (build_pointer_type (string_cst_type), result); ++ } ++#endif + } + + if (untyped) +@@ -2119,22 +2159,22 @@ + if (!implicit_comparison && !max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST) + { + if (val == boolean_false_node) +- warning ("Comparison always yields `False' due to limited range of data type."); ++ gpc_warning ("Comparison always yields `False' due to limited range of data type."); + if (val == boolean_true_node) +- warning ("Comparison always yields `True' due to limited range of data type."); ++ gpc_warning ("Comparison always yields `True' due to limited range of data type."); + } + if (!implicit_comparison && !min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST) + { + if (val == boolean_false_node) +- warning ("Comparison always yields `False' due to limited range of data type."); ++ gpc_warning ("Comparison always yields `False' due to limited range of data type."); + if (val == boolean_true_node) +- warning ("Comparison always yields `True' due to limited range of data type."); ++ gpc_warning ("Comparison always yields `True' due to limited range of data type."); + } + + if (val) + { + if (TREE_SIDE_EFFECTS (primop0)) +- warning (" Operand with side-effects is not evaluated."); ++ gpc_warning (" Operand with side-effects is not evaluated."); + return val; + } + +@@ -2184,13 +2224,13 @@ + the signedness of the comparison isn't an issue, so suppress + the warning. */ + if (!implicit_comparison && TREE_CODE (primop0) != INTEGER_CST) +- warning ("Comparison `unsigned value >= 0' always yields `True'."); ++ gpc_warning ("Comparison `unsigned value >= 0' always yields `True'."); + value = boolean_true_node; + break; + + case LT_EXPR: + if (!implicit_comparison && TREE_CODE (primop0) != INTEGER_CST) +- warning ("Comparison `unsigned value < 0' always yields `False'."); ++ gpc_warning ("Comparison `unsigned value < 0' always yields `False'."); + value = boolean_false_node; + break; + +@@ -2201,7 +2241,7 @@ + if (value) + { + if (TREE_SIDE_EFFECTS (primop0)) +- warning (" Operand with side-effects is not evaluated."); ++ gpc_warning (" Operand with side-effects is not evaluated."); + return value; + } + } +@@ -2564,14 +2604,14 @@ + if (TREE_CODE (op1) == INTEGER_CST) + { + if (tree_int_cst_sgn (op1) < 0) +- warning ("right shift count is negative"); ++ gpc_warning ("right shift count is negative"); + else + { + if (TREE_INT_CST_LOW (op1) | TREE_INT_CST_HIGH (op1)) + short_shift = 1; + if (TREE_INT_CST_HIGH (op1) != 0 + || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1) >= TYPE_PRECISION (type0))) +- warning ("right shift count >= width of type"); ++ gpc_warning ("right shift count >= width of type"); + } + } + /* Use the type of the value to be shifted for the result. */ +@@ -2591,10 +2631,10 @@ + if (TREE_CODE (op1) == INTEGER_CST) + { + if (tree_int_cst_sgn (op1) < 0) +- warning ("left shift count is negative"); ++ gpc_warning ("left shift count is negative"); + else if (TREE_INT_CST_HIGH (op1) != 0 + || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1) >= TYPE_PRECISION (result_type))) +- warning ("left shift count >= width of type"); ++ gpc_warning ("left shift count >= width of type"); + } + if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != pascal_integer_type_node) + op1 = convert (pascal_integer_type_node, op1); +@@ -2606,7 +2646,7 @@ + case EQ_EXPR: + case NE_EXPR: + if (co->warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE)) +- warning ("comparing real numbers with `=' or `<>' is unsafe"); ++ gpc_warning ("comparing real numbers with `=' or `<>' is unsafe"); + /* Result of comparison is always Boolean, but don't convert the args to Boolean. */ + build_type = boolean_type_node; + if (ORDINAL_REAL_OR_COMPLEX_TYPE (code0) && compatible_relop_p (type0, type1)) +@@ -2658,7 +2698,7 @@ + { + result_type = common_type (type0, type1); + if (TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE) +- warning ("ordered comparisons of pointers to routines"); ++ gpc_warning ("ordered comparisons of pointers to routines"); + } + else if (!comp_object_or_schema_pointer_types (TREE_TYPE (type0), TREE_TYPE (type1), 0) + && !comp_object_or_schema_pointer_types (TREE_TYPE (type1), TREE_TYPE (type0), 0)) +@@ -2688,7 +2728,7 @@ + != COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (type1))) + pedwarn ("comparison of complete and incomplete pointers"); + else if (pedantic && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE) +- warning ("ordered comparision of pointers to routines"); ++ gpc_warning ("ordered comparision of pointers to routines"); + } + else + { +@@ -2895,13 +2935,13 @@ + { + mask = (~0L) << bits; + if ((mask & constant) != mask) +- warning ("comparison of promoted `not' unsigned with constant"); ++ gpc_warning ("comparison of promoted `not' unsigned with constant"); + } + } + else if (unsignedp0 && unsignedp1 + && (TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (result_type)) + && (TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (result_type))) +- warning ("comparison of promoted `not' unsigned with unsigned"); ++ gpc_warning ("comparison of promoted `not' unsigned with unsigned"); + } + } + } +@@ -2986,9 +3026,9 @@ + /* The result is a pointer of the same type that is being added. */ + tree result_type = TREE_TYPE (ptrop), size_exp = integer_one_node, result, folded; + if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE) +- warning ("untyped pointer used in arithmetic"); ++ gpc_warning ("untyped pointer used in arithmetic"); + else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE) +- warning ("pointer to a routine used in arithmetic"); ++ gpc_warning ("pointer to a routine used in arithmetic"); + else + size_exp = c_size_in_bytes (TREE_TYPE (result_type)); + /* Replace the integer argument with a suitable product by the object size. */ +@@ -3010,9 +3050,9 @@ + tree result, folded, restype = ptrdiff_type_node; + tree target_type = TREE_TYPE (TREE_TYPE (op0)); + if (TREE_CODE (target_type) == VOID_TYPE) +- warning ("untyped pointer used in pointer difference"); ++ gpc_warning ("untyped pointer used in pointer difference"); + if (TREE_CODE (target_type) == FUNCTION_TYPE) +- warning ("pointer to a routine used in pointer difference"); ++ gpc_warning ("pointer to a routine used in pointer difference"); + /* First do the subtraction as integers, then divide. */ + op0 = build_pascal_binary_op (MINUS_EXPR, convert (restype, op0), convert (restype, op1)); + /* This generates an error if op1 is pointer to incomplete type. */ +@@ -3170,7 +3210,8 @@ + } + + /* Addresses of constructors are needed for parameters. */ +- if (TREE_CODE (arg) == CONSTRUCTOR) ++ if (TREE_CODE (arg) == CONSTRUCTOR ++ || TREE_CODE (arg) == PASCAL_SET_CONSTRUCTOR) + { + if (!TREE_CONSTANT (arg)) + { +@@ -3321,15 +3362,15 @@ + && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE + && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE + && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype))) +- warning ("cast increases required alignment of target type"); ++ gpc_warning ("cast increases required alignment of target type"); + + if (TYPE_PRECISION (type) != TYPE_PRECISION (otype) && !TREE_CONSTANT (value)) + { + if (TREE_CODE (type) == INTEGER_TYPE && TREE_CODE (otype) == POINTER_TYPE) +- warning ("cast from pointer to integer of different size"); ++ gpc_warning ("cast from pointer to integer of different size"); + if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (otype) == INTEGER_TYPE + && TREE_CODE (value) != PLUS_EXPR && TREE_CODE (value) != MINUS_EXPR) +- warning ("cast to pointer from integer of different size"); ++ gpc_warning ("cast to pointer from integer of different size"); + } + + ovalue = value; +@@ -3372,7 +3413,7 @@ + if (TREE_CODE (otype) != VOID_TYPE + && TREE_CODE (type) != VOID_TYPE + && !tree_int_cst_equal (TYPE_SIZE (otype), TYPE_SIZE (type))) +- warning ("cast to type of different size"); ++ gpc_warning ("cast to type of different size"); + /* @@ GPC allows `@'...'' as an extension, but we don't want that here. */ + if (TREE_CODE (value) == STRING_CST) + error ("reference expected, value given"); +@@ -3784,7 +3825,7 @@ + return error_mark_node; + } + if (co->warn_object_assignment) +- warning ("assignment between objects"); ++ gpc_warning ("assignment between objects"); + + while (TREE_CODE (l) == NOP_EXPR + || TREE_CODE (l) == CONVERT_EXPR +@@ -3794,7 +3835,7 @@ + && TREE_CODE (l) != PARM_DECL + && TREE_CODE (l) != COMPONENT_REF + && TREE_CODE (l) != ARRAY_REF) +- warning ("left-hand side of object assignment is polymorphic"); ++ gpc_warning ("left-hand side of object assignment is polymorphic"); + + /* The following code assumes that the VMT pointer is the first field. + This is always the case in GPC. If this ever changes, the code must +@@ -3811,7 +3852,7 @@ + if (!field) + { + if (!is_init) +- warning ("assignment of object with no fields has no effect"); ++ gpc_warning ("assignment of object with no fields has no effect"); + return error_mark_node; + } + lastfield = tree_last (field); +@@ -3940,7 +3981,7 @@ + && TREE_CODE (TREE_TYPE (TREE_TYPE (lhs))) != VOID_TYPE + && TREE_CODE (TREE_TYPE (TREE_TYPE (lhs))) != FUNCTION_TYPE + && TYPE_ALIGN (TREE_TYPE (TREE_TYPE (inner_lhs))) > TYPE_ALIGN (TREE_TYPE (TREE_TYPE (lhs)))) +- warning ("lhs cast decreases required alignment of target type"); ++ gpc_warning ("lhs cast decreases required alignment of target type"); + + return build_modify_expr (inner_lhs, NOP_EXPR, convert (TREE_TYPE (inner_lhs), newrhs)); + } +diff -urN gpc-20060325/p/gbe.h gpc-20070904/p/gbe.h +--- gpc-20060325/p/gbe.h 2006-03-03 20:14:31.000000000 +0100 ++++ gpc-20070904/p/gbe.h 2007-09-04 08:22:53.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2, or (at your option) ++ the Free Software Foundation; either version 3, or (at your option) + any later version. + + GNU Pascal is distributed in the hope that it will be useful, +@@ -119,7 +119,7 @@ + #define CONCAT2(a,b) a##b + #define STRINGX(s) #s + #define lineno input_line +-#define warning_with_decl(x, y) (warning ("%H" y, &DECL_SOURCE_LOCATION (x), \ ++#define warning_with_decl(x, y) (gpc_warning ("%H" y, &DECL_SOURCE_LOCATION (x), \ + DECL_NAME (x) ? IDENTIFIER_POINTER (DECL_NAME (x)) : NULL)) + #define error_with_decl(x, y) (error ("%H" y, &DECL_SOURCE_LOCATION (x), \ + DECL_NAME (x) ? IDENTIFIER_POINTER (DECL_NAME (x)) : NULL)) +diff -urN gpc-20060325/p/gpc-lex.c gpc-20070904/p/gpc-lex.c +--- gpc-20060325/p/gpc-lex.c 2006-03-03 20:14:31.000000000 +0100 ++++ gpc-20070904/p/gpc-lex.c 2007-09-04 08:22:53.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 1, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -172,19 +172,19 @@ + return 0; + else if (Message && co->warn_mixed_comments) + { +- warning ("comments starting with `(*' and ending with `}' or starting with"); +- warning (" `{' and ending with `*)' are an obscure ISO Pascal feature"); ++ gpc_warning ("comments starting with `(*' and ending with `}' or starting with"); ++ gpc_warning (" `{' and ending with `*)' are an obscure ISO Pascal feature"); + } + break; + case NestedComments: + if (!co->nested_comments) + { + if (co->warn_nested_comments) +- warning ("comment opener found within a comment"); ++ gpc_warning ("comment opener found within a comment"); + return 0; + } + else if (Message && co->warn_nested_comments) +- warning ("nested comments are a GPC extension"); ++ gpc_warning ("nested comments are a GPC extension"); + break; + case DelphiComments: + if (!co->delphi_comments) +@@ -268,7 +268,7 @@ + } + } + if (in_string) +- warning ("unterminated string in compiler directive"); ++ gpc_warning ("unterminated string in compiler directive"); + *q = 0; + process_pascal_directive (s, q - s); + } +@@ -673,9 +673,9 @@ + if (value == ';' && co->warn_semicolon) + switch (last_token) + { +- case p_then: warning ("`;' after `then'"); break; +- case p_else: warning ("`;' after `else'"); break; +- case p_do: warning ("`;' after `do'"); break; ++ case p_then: gpc_warning ("`;' after `then'"); break; ++ case p_else: gpc_warning ("`;' after `else'"); break; ++ case p_do: gpc_warning ("`;' after `do'"); break; + } + last_token = value; + +diff -urN gpc-20060325/p/gpc-options.h gpc-20070904/p/gpc-options.h +--- gpc-20060325/p/gpc-options.h 2006-02-18 14:22:58.000000000 +0100 ++++ gpc-20070904/p/gpc-options.h 2007-09-04 08:22:53.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 1, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -75,8 +75,7 @@ + "-ftruncate-strings", + "-fexact-compare-strings", + "-fio-checking", +- "-frange-checking", +- "-fobject-checking", ++ "-frange-and-object-checking", + "-fno-pointer-checking", + "-fno-pointer-checking-user-defined", + "-fno-stack-checking", +diff -urN gpc-20060325/p/gpc.c gpc-20070904/p/gpc.c +--- gpc-20060325/p/gpc.c 2006-03-03 20:55:43.000000000 +0100 ++++ gpc-20070904/p/gpc.c 2007-09-04 08:22:53.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free +-Software Foundation; either version 2, or (at your option) any later ++Software Foundation; either version 3, or (at your option) any later + version. + + GNU Pascal is distributed in the hope that it will be useful, but WITHOUT ANY +@@ -629,6 +629,12 @@ + + static const char *if_exists_spec_function (int, const char **); + static const char *if_exists_else_spec_function (int, const char **); ++ #ifdef GCC_4 ++static const char *replace_outfile_spec_function (int, const char **); ++#endif ++#ifdef GCC_4_1 ++static const char *version_compare_spec_function (int, const char **); ++#endif + + /* The Specs Language + +@@ -1037,8 +1043,11 @@ + therefore no dependency entry, confuses make into thinking a .o + file that happens to exist is up-to-date. */ + static const char *cpp_unique_options = +-"%{C|CC:%{!E:%eGCC does not support -C or -CC without -E}}\ +- %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I\ ++"%{C|CC:%{!E:%eGCC does not support -C or -CC without -E}}" ++#ifdef GCC_3_3 ++" %{!Q:-quiet}" ++#endif ++" %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I\ + %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\ + %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\ + %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\ +@@ -1319,6 +1328,10 @@ + {0, 0, 0} + }; + ++#ifdef GCC_4_1 ++#include "regex.h" ++#endif ++ + /* Number of elements in default_compilers, not counting the terminator. */ + + static const int n_default_compilers = ARRAY_SIZE (default_compilers) - 1; +@@ -1932,6 +1945,12 @@ + { + { "if-exists", if_exists_spec_function }, + { "if-exists-else", if_exists_else_spec_function }, ++#ifdef GCC_4 ++ { "replace-outfile", replace_outfile_spec_function }, ++#endif ++#ifdef GCC_4_1 ++ { "version-compare", version_compare_spec_function }, ++#endif + { 0, 0 } + }; + +@@ -8422,6 +8441,149 @@ + return argv[1]; + } + ++#ifdef GCC_4 ++/* replace-outfile built-in spec function. ++ ++ This looks for the first argument in the outfiles array's name and ++ replaces it with the second argument. */ ++ ++static const char * ++replace_outfile_spec_function (int argc, const char **argv) ++{ ++ int i; ++ /* Must have exactly two arguments. */ ++ if (argc != 2) ++ abort (); ++ ++ for (i = 0; i < n_infiles; i++) ++ { ++ if (outfiles[i] && !strcmp (outfiles[i], argv[0])) ++ outfiles[i] = xstrdup (argv[1]); ++ } ++ return NULL; ++} ++#endif ++ ++#ifdef GCC_4_1 ++/* Given two version numbers, compares the two numbers. ++ A version number must match the regular expression ++ ([1-9][0-9]*|0)(\.([1-9][0-9]*|0))* ++*/ ++static int ++compare_version_strings (const char *v1, const char *v2) ++{ ++ int rresult; ++ regex_t r; ++ ++ if (regcomp (&r, "^([1-9][0-9]*|0)(\\.([1-9][0-9]*|0))*$", ++ REG_EXTENDED | REG_NOSUB) != 0) ++ abort (); ++ rresult = regexec (&r, v1, 0, NULL, 0); ++ if (rresult == REG_NOMATCH) ++ fatal ("invalid version number `%s'", v1); ++ else if (rresult != 0) ++ abort (); ++ rresult = regexec (&r, v2, 0, NULL, 0); ++ if (rresult == REG_NOMATCH) ++ fatal ("invalid version number `%s'", v2); ++ else if (rresult != 0) ++ abort (); ++ ++ return strverscmp (v1, v2); ++} ++ ++ ++/* version_compare built-in spec function. ++ ++ This takes an argument of the following form: ++ ++ [] ++ ++ and produces "result" if the comparison evaluates to true, ++ and nothing if it doesn't. ++ ++ The supported values are: ++ ++ >= true if switch is a later (or same) version than arg1 ++ !> opposite of >= ++ < true if switch is an earlier version than arg1 ++ !< opposite of < ++ >< true if switch is arg1 or later, and earlier than arg2 ++ <> true if switch is earlier than arg1 or is arg2 or later ++ ++ If the switch is not present, the condition is false unless ++ the first character of the is '!'. ++ ++ For example, ++ %:version-compare(>= 10.3 mmacosx-version-min= -lmx) ++ adds -lmx if -mmacosx-version-min=10.3.9 was passed. */ ++ ++static const char * ++version_compare_spec_function (int argc, const char **argv) ++{ ++ int comp1, comp2; ++ size_t switch_len; ++ const char *switch_value = NULL; ++ int nargs = 1, i; ++ bool result; ++ ++ if (argc < 3) ++ fatal ("too few arguments to %%:version-compare"); ++ if (argv[0][0] == '\0') ++ abort (); ++ if ((argv[0][1] == '<' || argv[0][1] == '>') && argv[0][0] != '!') ++ nargs = 2; ++ if (argc != nargs + 3) ++ fatal ("too many arguments to %%:version-compare"); ++ ++ switch_len = strlen (argv[nargs + 1]); ++ for (i = 0; i < n_switches; i++) ++ if (!strncmp (switches[i].part1, argv[nargs + 1], switch_len) ++ && check_live_switch (i, switch_len)) ++ switch_value = switches[i].part1 + switch_len; ++ ++ if (switch_value == NULL) ++ comp1 = comp2 = -1; ++ else ++ { ++ comp1 = compare_version_strings (switch_value, argv[1]); ++ if (nargs == 2) ++ comp2 = compare_version_strings (switch_value, argv[2]); ++ else ++ comp2 = -1; /* This value unused. */ ++ } ++ ++ switch (argv[0][0] << 8 | argv[0][1]) ++ { ++ case '>' << 8 | '=': ++ result = comp1 >= 0; ++ break; ++ case '!' << 8 | '<': ++ result = comp1 >= 0 || switch_value == NULL; ++ break; ++ case '<' << 8: ++ result = comp1 < 0; ++ break; ++ case '!' << 8 | '>': ++ result = comp1 < 0 || switch_value == NULL; ++ break; ++ case '>' << 8 | '<': ++ result = comp1 >= 0 && comp2 < 0; ++ break; ++ case '<' << 8 | '>': ++ result = comp1 < 0 || comp2 >= 0; ++ break; ++ ++ default: ++ fatal ("unknown operator '%s' in %%:version-compare", argv[0]); ++ } ++ if (! result) ++ return NULL; ++ ++ return argv[nargs + 2]; ++} ++#endif ++ + /* GPC specific code */ + + /* Delete the automake temp file (if present) and exit(). */ +@@ -8716,7 +8878,7 @@ + \n\ + GNU Pascal is free software; you can redistribute it and/or modify\n\ + it under the terms of the GNU General Public License as published by\n\ +-the Free Software Foundation; either version 2, or (at your option)\n\ ++the Free Software Foundation; either version 3, or (at your option)\n\ + any later version.\n\n", GPC_RELEASE_STRING, version_string); + printf ("\ + GNU Pascal is distributed in the hope that it will be useful,\n\ +diff -urN gpc-20060325/p/gpc.h gpc-20070904/p/gpc.h +--- gpc-20060325/p/gpc.h 2006-03-11 00:40:51.000000000 +0100 ++++ gpc-20070904/p/gpc.h 2007-09-04 08:22:53.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -43,15 +43,28 @@ + + #undef USE_CPPLIB /* Not suitable for Pascal */ + ++#include "gbe.h" ++ + #ifndef GCC_3_3 + #define GTY(x) + #endif + +-#include "gbe.h" ++#ifdef GCC_4_1 ++#define gpc_warning warning0 ++#define SET_CONSTRUCTOR_ELTS(t) TREE_OPERAND (t, 0) ++#else ++#define gpc_warning warning ++#define PASCAL_SET_CONSTRUCTOR CONSTRUCTOR ++#define SET_CONSTRUCTOR_ELTS(t) CONSTRUCTOR_ELTS (t) ++#define CONSTRUCTOR_APPEND_ELT(C, I, V) do \ ++ {\ ++ (C) = tree_cons ((I), (V), (C));\ ++ } while (0) ++#endif + + #ifdef GCC_4_0 + extern tree xnon_lvalue (tree x); +-// #define non_lvalue(x) (build1 (NON_LVALUE_EXPR, TREE_TYPE (x), x)) ++/* #define non_lvalue(x) (build1 (NON_LVALUE_EXPR, TREE_TYPE (x), x)) */ + #define non_lvalue(x) (xnon_lvalue (x)) + #define PASCAL_BIT_FIELD_REF_UNSIGNED(x) \ + (TREE_CHECK2(x, BIT_FIELD_REF, PASCAL_BIT_FIELD_REF)->common.unsigned_flag) +@@ -382,7 +395,9 @@ + /* IS_EXPR_CODE_CLASS ought to work, but for CONSTRUCTORS the backend overwrites + this field via TREE_CST_RTL. @@@@@@@@@@ Severe backend bug! This is no fix. */ + #define HAS_EXP_ORIGINAL_CODE_FIELD(exp) \ +- (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))) && TREE_CODE (exp) != CONSTRUCTOR) ++ (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))) \ ++ && TREE_CODE (exp) != CONSTRUCTOR \ ++ && TREE_CODE (exp) != PASCAL_SET_CONSTRUCTOR) + + #define IS_EXPR_OR_REF_CODE_CLASS(c) (IS_EXPR_CODE_CLASS (c) || \ + c == tcc_reference) +@@ -887,7 +902,7 @@ + #define YYLTYPE_IS_DECLARED + + /* parse.c contains the same declarations again */ +-#ifndef LEX_ID ++#ifndef YYTOKENTYPE + #include "parse.h" + #endif + +@@ -1328,6 +1343,7 @@ + extern tree build_pascal_binary_op (enum tree_code, tree, tree); + extern tree build_implicit_pascal_binary_op (enum tree_code, tree, tree); + extern int operators_defined; ++extern void set_string_length (tree, int, int); + extern tree build_string_constant (const char *, int, int); + extern tree build_caret_string_constant (int); + extern tree combine_strings (tree, int); +@@ -1374,6 +1390,7 @@ + extern void un_initialize_block (tree, int, int); + extern void expand_call_statement (tree); + extern void expand_pascal_assignment (tree, tree); ++extern void expand_pascal_assignment2 (tree, tree, int); + extern tree assign_set (tree, tree); + extern tree assign_string (tree, const tree); + extern void start_main_program (void); +diff -urN gpc-20060325/p/gpcpp.c gpc-20070904/p/gpcpp.c +--- gpc-20060325/p/gpcpp.c 2006-02-18 14:22:58.000000000 +0100 ++++ gpc-20070904/p/gpcpp.c 2007-09-04 08:22:53.000000000 +0200 +@@ -14,7 +14,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -566,7 +566,7 @@ + static U_CHAR *macarg1 (U_CHAR *, U_CHAR *, int *, int *, int *, int); + static int discard_comments (U_CHAR *, int, int); + static int change_newlines (U_CHAR *, int); +-static void warning (const char *, ...) ATTRIBUTE_PRINTF_1; ++static void gpc_warning (const char *, ...) ATTRIBUTE_PRINTF_1; + static void error (const char *, ...) ATTRIBUTE_PRINTF_1; + static void verror (const char *, va_list); + static void error_from_errno (const char *); +@@ -1348,8 +1348,8 @@ + { + if (warn_mixed_comments && !inhibit_warnings) + { +- warning ("comments starting with `(*' and ending with `}' or starting with"); +- warning (" `{' and ending with `*)' are an obscure ISO Pascal feature"); ++ gpc_warning ("comments starting with `(*' and ending with `}' or starting with"); ++ gpc_warning (" `{' and ending with `*)' are an obscure ISO Pascal feature"); + } + } + +@@ -1357,7 +1357,7 @@ + warn_nested_comment (void) + { + if (warn_nested_comments && !inhibit_warnings) +- warning (nested_comments ? "nested comments are a GPC extension" : "comment opener found within comment"); ++ gpc_warning (nested_comments ? "nested comments are a GPC extension" : "comment opener found within comment"); + } + + /* Skip the (non-`//') comment starting at bp, handling C, Pascal, +@@ -1550,7 +1550,7 @@ + if (!ip->fname) { + /* note BP character constants */ + if (ip->buf != beg_of_line && ((*ibp < '0' || *ibp > '9') && *ibp != '$')) +- warning ("preprocessing directive not recognized within macro arg"); ++ gpc_warning ("preprocessing directive not recognized within macro arg"); + goto randomchar; + } + if (ident_length) +@@ -2438,14 +2438,14 @@ + bp++; + } else if (*bp == '{') { + if (bp[1] == '$') +- warning ("ignoring Pascal style directive within C style directive"); ++ gpc_warning ("ignoring Pascal style directive within C style directive"); + ip->bufp = bp + 1; + skip_to_end_of_comment (ip, &ip->lineno, '}'); + bp = ip->bufp; + } else if ((*bp == '\\') && bp[1] == '\n') { + } else if (IS_COMMENT_START (bp)) { + if (bp[1] == '*' && bp[2] == '$') +- warning ("ignoring Pascal style directive within C style directive"); ++ gpc_warning ("ignoring Pascal style directive within C style directive"); + ip->bufp = bp + 2; + skip_to_end_of_comment (ip, &ip->lineno, 0); + bp = ip->bufp; +@@ -2567,7 +2567,7 @@ + U_CHAR *obp = bp - 1; + if (*bp == '$') + { +- warning ("ignoring Pascal style directive within C style directive"); ++ gpc_warning ("ignoring Pascal style directive within C style directive"); + *bp = ' '; + } + ip->bufp = bp; +@@ -2591,7 +2591,7 @@ + U_CHAR *obp = bp - 1; + if (*bp == '*' && bp[1] == '$') + { +- warning ("ignoring Pascal style directive within C style directive"); ++ gpc_warning ("ignoring Pascal style directive within C style directive"); + bp[1] = ' '; + } + ip->bufp = bp + 1; +@@ -2751,12 +2751,12 @@ + conditionals. So, just don't allow such things ... */ + if (*p == '{' && p[1] == '$') + { +- warning ("ignoring compiler directive within another directive"); ++ gpc_warning ("ignoring compiler directive within another directive"); + p[1] = ' '; + } + if (*p == '(' && p[1] == '*' && p[2] == '$') + { +- warning ("ignoring compiler directive within another directive"); ++ gpc_warning ("ignoring compiler directive within another directive"); + p[2] = ' '; + } + if (IS_COMMENT_START2 (p)) +@@ -3353,7 +3353,7 @@ + f = open (fname, O_RDONLY, 0666); + #ifdef EACCES + if (f == -1 && errno == EACCES) +- warning ("header file %s exists, but is not readable", fname); ++ gpc_warning ("header file %s exists, but is not readable", fname); + #endif + if (f >= 0) + break; +@@ -3540,7 +3540,7 @@ + bp++; + SKIP_WHITE_SPACE (bp); + } else +- warning ("missing white space after `$define %.*s'", ++ gpc_warning ("missing white space after `$define %.*s'", + sym_length, symname); + } + /* Now everything from bp before limit is the definition. */ +@@ -3992,7 +3992,7 @@ + /* If we are generating additional info for debugging (with -g) we + need to pass through all effective #undef directives. */ + if (hp->type != T_MACRO) +- warning ("undefining `%s'", hp->name); ++ gpc_warning ("undefining `%s'", hp->name); + delete_macro (hp); + } + if (pedantic) { +@@ -4030,7 +4030,7 @@ + memcpy ((char *) copy, (char *) buf, length); + copy[length] = 0; + SKIP_WHITE_SPACE (copy); +- warning ("#warning %s", copy); ++ gpc_warning ("#gpc_warning %s", copy); + return 0; + } + +@@ -5711,7 +5711,7 @@ + + /* Print warning. */ + static void +-warning (const char *msg, ...) ++gpc_warning (const char *msg, ...) + { + va_list args; + va_start (args, msg); +diff -urN gpc-20060325/p/gpcspec.c gpc-20070904/p/gpcspec.c +--- gpc-20060325/p/gpcspec.c 2006-02-18 14:22:58.000000000 +0100 ++++ gpc-20070904/p/gpcspec.c 2007-09-04 08:22:53.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -380,7 +380,7 @@ + \n\ + GNU Pascal is free software; you can redistribute it and/or modify\n\ + it under the terms of the GNU General Public License as published by\n\ +-the Free Software Foundation; either version 2, or (at your option)\n\ ++the Free Software Foundation; either version 3, or (at your option)\n\ + any later version.\n\ + \n\ + GNU Pascal is distributed in the hope that it will be useful,\n\ +diff -urN gpc-20060325/p/lang-options.h gpc-20070904/p/lang-options.h +--- gpc-20060325/p/lang-options.h 2006-02-18 14:22:58.000000000 +0100 ++++ gpc-20070904/p/lang-options.h 2007-09-04 08:22:53.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/lang-specs.h gpc-20070904/p/lang-specs.h +--- gpc-20060325/p/lang-specs.h 2006-03-25 02:53:09.000000000 +0100 ++++ gpc-20070904/p/lang-specs.h 2007-09-04 08:22:53.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/lang.c gpc-20070904/p/lang.c +--- gpc-20060325/p/lang.c 2006-03-24 02:47:15.000000000 +0100 ++++ gpc-20070904/p/lang.c 2007-09-04 08:22:53.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -178,7 +178,7 @@ + res = build (COMPOUND_EXPR, TREE_TYPE (res), + current_statement_list, res); + current_statement_list = save_statement_list; +- unshare_all_trees (res); ++ res = unshare_expr (res); + } + break; + +@@ -200,15 +200,16 @@ + DECL_INITIAL (new_var) = TREE_OPERAND (t, 0); + + TREE_OPERAND (t, 0) = new_var; ++ recompute_tree_invarant_for_addr_expr (t); + return GS_ALL_DONE; + } + return GS_UNHANDLED; + +- case CONSTRUCTOR: ++ case PASCAL_SET_CONSTRUCTOR: + if (TREE_CODE (TREE_TYPE (t)) == SET_TYPE) + { + tree type = TREE_TYPE (t); +- tree elt = CONSTRUCTOR_ELTS (t); ++ tree elt = SET_CONSTRUCTOR_ELTS (t); + tree domain = TYPE_DOMAIN (type); + tree domain_min = convert (sbitsizetype, TYPE_MIN_VALUE (domain)); + tree domain_max = convert (sbitsizetype, TYPE_MAX_VALUE (domain)); +@@ -690,6 +691,7 @@ + #define flag_objc 0 + #define flag_isoc99 0 + #define rs6000_cpu_cpp_builtins(foo) ++#define darwin_cpp_builtins(foo) + #endif + + #ifdef GCC_3_4 +@@ -1204,7 +1206,7 @@ + DECL_COMMON (*node) = 0; + else + { +- warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + +@@ -1221,7 +1223,7 @@ + DECL_COMMON (*node) = 1; + else + { +- warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + +@@ -1247,7 +1249,7 @@ + TREE_READONLY (TREE_TYPE (type)), 1)); + else + { +- warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + +@@ -1272,7 +1274,7 @@ + TREE_USED (decl) = 1; + else + { +- warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + } +@@ -1305,7 +1307,7 @@ + TREE_THIS_VOLATILE (TREE_TYPE (type)))); + else + { +- warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + +@@ -1491,7 +1493,7 @@ + } + else + { +- warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + +@@ -1563,7 +1565,10 @@ + #define LANG_HOOKS_TYPE_FOR_MODE type_for_mode + + #define LANG_HOOKS_MARK_ADDRESSABLE pascal_mark_addressable ++ ++#ifndef GCC_4_1 + #define LANG_HOOKS_TRUTHVALUE_CONVERSION truthvalue_conversion ++#endif + + #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL + #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL copy_decl_lang_specific +@@ -1588,6 +1593,178 @@ + #undef LANG_HOOKS_TYPES_COMPATIBLE_P + #define LANG_HOOKS_TYPES_COMPATIBLE_P pascal_types_compatible_p + ++#ifdef GCC_4_1 ++#undef LANG_HOOKS_INIT_TS ++#define LANG_HOOKS_INIT_TS pascal_init_ts ++#undef LANG_HOOKS_EXPAND_CONSTANT ++#define LANG_HOOKS_EXPAND_CONSTANT pascal_expand_constant ++ ++ ++ ++/* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node. ++ The result is placed in BUFFER (which has length BIT_SIZE), ++ with one bit in each char ('\000' or '\001'). ++ ++ If the constructor is constant, NULL_TREE is returned. ++ Otherwise, a TREE_LIST of the non-constant elements is emitted. */ ++ ++static tree ++get_set_constructor_bits (tree init, char *buffer, int bit_size) ++{ ++ int i; ++ tree vals; ++ HOST_WIDE_INT domain_min ++ = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))), 0); ++ HOST_WIDE_INT low_limit = domain_min; ++ tree non_const_bits = NULL_TREE; ++ ++ if (set_alignment) ++ /* Note: `domain_min -= domain_min % set_alignment' would be wrong for negative ++ numbers (rounding towards 0, while we have to round towards -inf). */ ++ domain_min &= -(int) set_alignment; ++ ++ low_limit -= domain_min; ++ ++ for (i = 0; i < bit_size; i++) ++ buffer[i] = 0; ++ ++ for (vals = TREE_OPERAND (init, 0) /* CONSTRUCTOR_ELTS (init) */; ++ vals != NULL_TREE; vals = TREE_CHAIN (vals)) ++ { ++ if (!host_integerp (TREE_VALUE (vals), 0) ++ || (TREE_PURPOSE (vals) != NULL_TREE ++ && !host_integerp (TREE_PURPOSE (vals), 0))) ++ non_const_bits ++ = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits); ++ else if (TREE_PURPOSE (vals) != NULL_TREE) ++ { ++ /* Set a range of bits to ones. */ ++ HOST_WIDE_INT lo_index ++ = tree_low_cst (TREE_PURPOSE (vals), 0) - domain_min; ++ HOST_WIDE_INT hi_index ++ = tree_low_cst (TREE_VALUE (vals), 0) - domain_min; ++ ++ if (lo_index < low_limit || hi_index >= bit_size) ++ { ++ error ("invalid initializer for set"); ++ return NULL_TREE; ++ } ++ ++ gcc_assert (lo_index >= 0); ++ gcc_assert (lo_index < bit_size); ++ gcc_assert (hi_index >= 0); ++ gcc_assert (hi_index < bit_size); ++ for (; lo_index <= hi_index; lo_index++) ++ buffer[lo_index] = 1; ++ } ++ else ++ { ++ /* Set a single bit to one. */ ++ HOST_WIDE_INT index ++ = tree_low_cst (TREE_VALUE (vals), 0) - domain_min; ++ if (index < 0 || index >= bit_size) ++ { ++ error ("invalid initializer for set"); ++ return NULL_TREE; ++ } ++ buffer[index] = 1; ++ } ++ } ++ return non_const_bits; ++} ++ ++/* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node. ++ The result is placed in BUFFER (which is an array of bytes). ++ If the constructor is constant, NULL_TREE is returned. ++ Otherwise, a TREE_LIST of the non-constant elements is emitted. */ ++ ++static tree ++get_set_constructor_bytes (tree init, unsigned char *buffer, int wd_size) ++{ ++ int i; ++#ifdef GPC ++ int bit_size = wd_size * BITS_PER_UNIT; ++ unsigned int bit_pos = 0; ++#else /* not GPC */ ++ int set_word_size = BITS_PER_UNIT; ++ int bit_size = wd_size * set_word_size; ++ int bit_pos = 0; ++#endif /* not GPC */ ++ unsigned char *bytep = buffer; ++ char *bit_buffer = alloca (bit_size); ++ tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size); ++ ++ for (i = 0; i < wd_size; i++) ++ buffer[i] = 0; ++ ++ for (i = 0; i < bit_size; i++) ++ { ++#ifdef GPC ++ if (bit_buffer[i]) ++ { ++ int k = bit_pos / BITS_PER_UNIT; ++ if (WORDS_BIG_ENDIAN) ++ k = set_word_size / BITS_PER_UNIT - 1 - k; ++ if (set_words_big_endian) ++ bytep[k] |= (1 << (BITS_PER_UNIT - 1 - bit_pos % BITS_PER_UNIT)); ++ else ++ bytep[k] |= (1 << (bit_pos % BITS_PER_UNIT)); ++ } ++ bit_pos++; ++ if (bit_pos >= set_word_size) ++ { ++ bit_pos = 0; ++ bytep += set_word_size / BITS_PER_UNIT; ++ } ++#else /* not GPC */ ++ if (bit_buffer[i]) ++ { ++ if (BYTES_BIG_ENDIAN) ++ *bytep |= (1 << (set_word_size - 1 - bit_pos)); ++ else ++ *bytep |= 1 << bit_pos; ++ } ++ bit_pos++; ++ if (bit_pos >= set_word_size) ++ bit_pos = 0, bytep++; ++#endif ++ } ++ return non_const_bits; ++} ++ ++ ++static tree ++pascal_expand_constant (tree t) ++{ ++ tree nt; ++ if (TREE_CODE (t) == PASCAL_SET_CONSTRUCTOR) ++ { ++ HOST_WIDE_INT len = int_size_in_bytes (TREE_TYPE (t)); ++ char *tmp = xmalloc (len); ++ if (!get_set_constructor_bytes (t, (unsigned char *) tmp, len)) ++ { ++ nt = build_string (len, tmp); ++ gcc_assert (TREE_INT_CST_LOW (TYPE_SIZE (char_type_node)) == 8); ++ TREE_TYPE (nt) = build_simple_array_type (char_type_node, ++ build_index_type (build_int_2 (len, 0))); ++ t = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (t), nt); ++ } ++ } ++ return t; ++} ++ ++static void ++pascal_init_ts (void) ++{ ++ tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1; ++ tree_contains_struct[OPERATOR_DECL][TS_DECL_COMMON] = 1; ++ tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; ++ tree_contains_struct[OPERATOR_DECL][TS_DECL_MINIMAL] = 1; ++} ++ ++#endif ++ ++ + int + pascal_types_compatible_p (tree t1, tree t2) + { +@@ -1763,14 +1940,14 @@ + if (TYPE_P (node)) + *anode = type = build_type_copy (type); + if (!valid_machine_attribute (name, args, decl, type)) +- warning ("`%s' attribute directive ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute directive ignored", IDENTIFIER_NAME (name)); + else if (decl) + type = TREE_TYPE (decl); + continue; + } + else if (attrtab[i].decl_req && !decl) + { +- warning ("`%s' attribute does not apply to types", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute does not apply to types", IDENTIFIER_NAME (name)); + continue; + } + else if (list_length (args) < attrtab[i].min || list_length (args) > attrtab[i].max) +@@ -1787,14 +1964,14 @@ + if (TREE_CODE (decl) == VAR_DECL) + DECL_COMMON (decl) = 0; + else +- warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); + break; + + case A_COMMON: + if (TREE_CODE (decl) == VAR_DECL) + DECL_COMMON (decl) = 1; + else +- warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); + break; + + case A_NORETURN: +@@ -1804,7 +1981,7 @@ + TREE_TYPE (decl) = type = build_pointer_type (p_build_type_variant (TREE_TYPE (type), + TREE_READONLY (TREE_TYPE (type)), 1)); + else +- warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); + break; + + case A_UNUSED: +@@ -1817,7 +1994,7 @@ + || TREE_CODE (decl) == FUNCTION_DECL) + TREE_USED (decl) = 1; + else +- warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); + break; + + case A_CONST: +@@ -1827,7 +2004,7 @@ + TREE_TYPE (decl) = type = build_pointer_type (p_build_type_variant (TREE_TYPE (type), + 1, TREE_THIS_VOLATILE (TREE_TYPE (type)))); + else +- warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); + break; + + case A_SECTION: +@@ -1905,7 +2082,7 @@ + assemble_alias (decl, id); + } + else +- warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); ++ gpc_warning ("`%s' attribute ignored", IDENTIFIER_NAME (name)); + break; + } + } +diff -urN gpc-20060325/p/lang.opt gpc-20070904/p/lang.opt +--- gpc-20060325/p/lang.opt 2006-03-03 20:17:49.000000000 +0100 ++++ gpc-20070904/p/lang.opt 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + ; + ; GNU Pascal is free software; you can redistribute it and/or modify + ; it under the terms of the GNU General Public License as published by +-; the Free Software Foundation; either version 2, or (at your option) ++; the Free Software Foundation; either version 3, or (at your option) + ; any later version. + ; + ; GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/module.c gpc-20070904/p/module.c +--- gpc-20060325/p/module.c 2006-03-24 20:09:49.000000000 +0100 ++++ gpc-20070904/p/module.c 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -38,6 +38,12 @@ + #define HOST_PTR_PRINTF_CAST_TYPE HOST_WIDE_INT + #endif + ++#ifdef GCC_4_1 ++#define GPC_HOST_PTR_PRINTF "%p" ++#else ++#define GPC_HOST_PTR_PRINTF HOST_PTR_PRINTF ++#endif ++ + #ifdef EGCS97 + + /* By default there is no special suffix for target executables. */ +@@ -393,7 +399,7 @@ + IDENTIFIER_NAME (id), + current_module->main_program ? "program" : "module"); + else +- warning ( ++ gpc_warning ( + "identifier `%s' in %s heading is not a variable of file type", + IDENTIFIER_NAME (id), + current_module->main_program ? "program" : "module"); +@@ -467,7 +473,7 @@ + if (!id) + { + if (!co->pascal_dialect) +- warning ("missing program header"); ++ gpc_warning ("missing program header"); + else /* BP does not even warn */ + chk_dialect ("programs without program header are", B_D_PASCAL); + id = get_identifier ("noname"); +@@ -544,18 +550,15 @@ + create_gpi_files (); + if (co->interface_only) + exit_compilation (); +- if (co->implementation_only) +- { +- /* Make sure that interface nodes keep their identity by reloading the +- GPI files previously created (presumably) with `--interface_only'. This +- is the same as with separate interface and implementation modules. */ ++ /* Make sure that interface nodes keep their identity by reloading the ++ GPI files previously created (presumably) with `--interface_only'. This ++ is the same as with separate interface and implementation modules. */ + module_t m = current_module; + clear_forward_decls (); /* don't complain in poplevel */ + finalize_module (1); + current_module = m; + pushlevel (0); + load_own_interface (0); +- } + current_module->implementation = 1; + } + +@@ -563,7 +566,7 @@ + finalize_module (int implementation_follows) + { + if (co->implementation_only && co->automake_level) +- warning ("`--automake' together with `--implementation-only' can cause problems"); ++ gpc_warning ("`--automake' together with `--implementation-only' can cause problems"); + if (errorcount || sorrycount) + exit_compilation (); + if (!implementation_follows /* && !co->implementation_only */) +@@ -742,7 +745,7 @@ + if (*p == ')') + p++; + else +- warning ("missing `)' in `--uses' parameter"); ++ gpc_warning ("missing `)' in `--uses' parameter"); + file_name = build_string_constant (buffer, q - buffer, 0); + } + else +@@ -755,7 +758,7 @@ + || (*p == '_'))) + { + if (*p != ',') +- warning ("missing `,' in `--uses' parameter"); ++ gpc_warning ("missing `,' in `--uses' parameter"); + p++; + } + } +@@ -1862,9 +1865,11 @@ + { + tree t = rb.nodes[n]; + if (t && (TREE_CODE (t) == FUNCTION_DECL || (TREE_CODE (t) == VAR_DECL)) +-/* #ifndef GCC_4_0 */ ++#ifndef GCC_4_0 + && !DECL_RTL_SET_P (t) +-/* #endif */ ++#else ++ && !PASCAL_DECL_IMPORTED (t) ++#endif + ) + { + if (!module_interface) +@@ -1878,27 +1883,16 @@ + DECL_INITIAL (t) = NULL_TREE; + #endif + } +-#if 0 ++#ifdef GCC_4_0 + else + { +- mark_decl_referenced (t); ++ if (TREE_CODE (t) == VAR_DECL) ++ rest_of_decl_compilation (t, 1, 0); + } + #endif + PASCAL_DECL_WEAK (t) = 0; + PASCAL_DECL_IMPORTED (t) = 1; +- if (module_interface && TREE_CODE (t) == VAR_DECL +- && DECL_INITIAL (t)) +- { +-#if 0 +- fprintf (stderr, "DECL_INITIAL (%p)\n", t); +- debug_tree (t); +- debug_tree (DECL_INITIAL (t)); +-#endif +- } +-#ifdef GCC_4_0 +- /* @@@@@@@ Otherwise we have problems with vmt */ +- rest_of_decl_compilation (t, 1, 0); +-#else ++#ifndef GCC_4_0 + rest_of_decl_compilation (t, NULL, 1, 1); + #endif + } +@@ -1968,8 +1962,12 @@ + #else + #define DECL_FLAGS_SIZE 6 + #endif ++#ifndef GCC_4_1 + #define DECL_EXTRA_STORED(t) (t->decl.u1.i) + #else ++#define DECL_EXTRA_STORED(t) (t->decl_common.u1.i) ++#endif ++#else + #ifdef EGCS + #define DECL_FLAGS_SIZE 5 + #else +@@ -2049,7 +2047,7 @@ + if (code == INTERFACE_NAME_NODE) + { + fprintf (stderr, " \n", + IDENTIFIER_NAME (INTERFACE_TABLE (t)->interface_name), + IDENTIFIER_NAME (INTERFACE_TABLE (t)->module_name), +@@ -2078,7 +2076,10 @@ + gpi_int n; + store_length ((&DECL_SIZE (t)) + 1, DECL_FLAGS_SIZE); + STORE_ANY (DECL_EXTRA_STORED (t)); +- store_node (DECL_NAME (t)); ++#ifdef GCC_4_1 ++ if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL)) ++#endif ++ store_node (DECL_NAME (t)); + store_string (DECL_SOURCE_FILE (t)); + n = DECL_SOURCE_LINE (t); + STORE_ANY (n); +@@ -2088,8 +2089,13 @@ + #ifdef EGCS97 + store_node (DECL_SIZE_UNIT (t)); + #endif +- n = DECL_ALIGN (t); +- STORE_ANY (n); ++#ifdef GCC_4_1 ++ if (code != FUNCTION_DECL) ++#endif ++ { ++ n = DECL_ALIGN (t); ++ STORE_ANY (n); ++ } + break; + } + case tcc_constant: +@@ -2343,6 +2349,24 @@ + store_node (TREE_TYPE (t)); + break; + ++#ifdef GCC_4_1 ++ case CONSTRUCTOR: ++ { ++ VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (t); ++ tree index, value; ++ unsigned HOST_WIDE_INT ix; ++ store_node (TREE_TYPE (t)); ++ ix = VEC_length (constructor_elt, elts); ++ STORE_ANY (ix); ++ FOR_EACH_CONSTRUCTOR_ELT (elts, ix, index, value) ++ { ++ store_node (index); ++ store_node (value); ++ } ++ } ++ break; ++#endif ++ + default: + #ifdef GCC_4_0 + gcc_assert (class_done); +@@ -2590,7 +2614,10 @@ + char *s; + LOAD_LENGTH ((&DECL_SIZE (t)) + 1, DECL_FLAGS_SIZE); + LOAD_ANY (DECL_EXTRA_STORED (t)); +- DECL_NAME (t) = load_node (); ++#ifdef GCC_4_1 ++ if (CODE_CONTAINS_STRUCT (code, TS_DECL_MINIMAL)) ++#endif ++ DECL_NAME (t) = load_node (); + s = load_string (rb.infile); + DECL_SOURCE_FILE (t) = PERMANENT_STRING (s); + free (s); +@@ -2602,9 +2629,17 @@ + #ifdef EGCS97 + DECL_SIZE_UNIT (t) = load_node (); + #endif +- LOAD_ANY (n); +- DECL_ALIGN (t) = n; +- DECL_IN_SYSTEM_HEADER (t) = 1; ++#ifdef GCC_4_1 ++ if (code != FUNCTION_DECL) ++#endif ++ { ++ LOAD_ANY (n); ++ DECL_ALIGN (t) = n; ++ } ++#ifdef GCC_4_1 ++ if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS)) ++#endif ++ DECL_IN_SYSTEM_HEADER (t) = 1; + break; + } + case tcc_constant: +@@ -2649,7 +2684,7 @@ + if (co->debug_gpi) + { + fprintf (stderr, "GPI loaded <%i>:\n \n", + IDENTIFIER_NAME (i), + IDENTIFIER_NAME (m), +@@ -2832,7 +2867,9 @@ + TREE_TYPE (t) = load_node (); + DECL_ARG_TYPE (t) = load_node (); + DECL_CONTEXT (t) = load_node (); ++#ifndef GCC_4_1 + SET_DECL_ASSEMBLER_NAME (t, DECL_NAME (t)); ++#endif + break; + + case FIELD_DECL: +@@ -2895,6 +2932,27 @@ + TREE_TYPE (t) = load_node (); + break; + ++#ifdef GCC_4_1 ++ case CONSTRUCTOR: ++ { ++ VEC(constructor_elt,gc) *elts = 0; ++ tree index, value; ++ unsigned HOST_WIDE_INT ix; ++ TREE_TYPE (t) = load_node (); ++ LOAD_ANY (ix); ++ while (ix > 0) ++ { ++ index = load_node (); ++ value = load_node (); ++ CONSTRUCTOR_APPEND_ELT (elts, index, value); ++ ix--; ++ } ++ CONSTRUCTOR_ELTS (t) = elts; ++ } ++ break; ++#endif ++ ++ + default: + break; + } +@@ -2962,7 +3020,7 @@ + for (q = n; *q; q++) + *q = TOLOWER (*q); + if (strcmp (f, n) && strcmp (n + strlen (n) - 4, "-all")) +- warning ("interface `%s' in file name `%s'", IDENTIFIER_NAME (name), plain_input_filename); ++ gpc_warning ("interface `%s' in file name `%s'", IDENTIFIER_NAME (name), plain_input_filename); + } + + /* Store names of interfaces imported by this module */ +@@ -3207,7 +3265,7 @@ + if (!itab_check_gpi_checksum (interface, checksum, 0)) + { + if (co->debug_automake) +- warning ("`%s' must be recompiled because of checksum mismatch in %s", name, str); ++ gpc_warning ("`%s' must be recompiled because of checksum mismatch in %s", name, str); + must_recompile = 1; + } + for (imported = current_module->imports; imported; imported = TREE_CHAIN (imported)) +@@ -3278,7 +3336,7 @@ + } + #if 0 + else if (implementation_flag) +- warning ("duplicate implementation flag in GPI file `%s'", name); ++ gpc_warning ("duplicate implementation flag in GPI file `%s'", name); + #endif + implementation_flag = 1; + break; +@@ -3335,7 +3393,7 @@ + } + if (errstr) + { +- warning (errstr, name); ++ gpc_warning (errstr, name); + module_filename = NULL; + must_recompile = 1; + } +diff -urN gpc-20060325/p/objects.c gpc-20070904/p/objects.c +--- gpc-20060325/p/objects.c 2006-03-24 06:03:26.000000000 +0100 ++++ gpc-20070904/p/objects.c 2007-09-04 08:22:53.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -455,7 +455,7 @@ + if (IDENTIFIER_IS_BUILT_IN (TREE_VALUE (cp), p_virtual)) + { + if (co->methods_always_virtual) +- warning ("explicit `virtual' given with `--methods-always-virtual'"); ++ gpc_warning ("explicit `virtual' given with `--methods-always-virtual'"); + virtual = 1; + nv++; + if (TREE_PURPOSE (cp)) +@@ -568,7 +568,7 @@ + if (PEDANTIC (B_D_PASCAL)) /* forbidden by OOE */ + error ("%s `%s' conflicts with ancestor type name", i ? "method" : "field", IDENTIFIER_NAME (DECL_NAME (field))); + else +- warning ("%s `%s' conflicts with ancestor type name", i ? "method" : "field", IDENTIFIER_NAME (DECL_NAME (field))); ++ gpc_warning ("%s `%s' conflicts with ancestor type name", i ? "method" : "field", IDENTIFIER_NAME (DECL_NAME (field))); + } + } + +@@ -637,7 +637,7 @@ + if (pedantic || !(co->pascal_dialect & B_D_PASCAL)) + error ("%s method `%s', overrides %s method", descr[p2], IDENTIFIER_NAME (DECL_NAME (*dm)), descr[p1]); + else +- warning ("%s method `%s', overrides %s method", descr[p2], IDENTIFIER_NAME (DECL_NAME (*dm)), descr[p1]); ++ gpc_warning ("%s method `%s', overrides %s method", descr[p2], IDENTIFIER_NAME (DECL_NAME (*dm)), descr[p1]); + } + if (PASCAL_VIRTUAL_METHOD (*pm)) + { +@@ -648,12 +648,12 @@ + } + if (PASCAL_TYPE_IOCRITICAL (TREE_TYPE (*dm)) + && !PASCAL_TYPE_IOCRITICAL (TREE_TYPE (*pm))) +- warning ("iocritical virtual method overrides non-iocritical one"); ++ gpc_warning ("iocritical virtual method overrides non-iocritical one"); + } + if (PASCAL_VIRTUAL_METHOD (*pm) && !PASCAL_VIRTUAL_METHOD (*dm)) + { + /* Overridden virtual methods must be virtual. */ +- warning ("method `%s' is virtual", IDENTIFIER_NAME (DECL_NAME (*dm))); ++ gpc_warning ("method `%s' is virtual", IDENTIFIER_NAME (DECL_NAME (*dm))); + PASCAL_VIRTUAL_METHOD (*dm) = 1; + } + /* If a virtual method overrides a non-virtual one, we must +@@ -662,7 +662,7 @@ + if (!PASCAL_VIRTUAL_METHOD (*pm) && PASCAL_VIRTUAL_METHOD (*dm)) + { + if (PEDANTIC (B_D_PASCAL) || co->pascal_dialect == 0) +- warning ("virtual method overrides non-virtual one"); ++ gpc_warning ("virtual method overrides non-virtual one"); + *pm = TREE_CHAIN (*pm); + continue; + } +@@ -782,8 +782,8 @@ + TYPE_LANG_CODE (type) = PASCAL_LANG_ABSTRACT_OBJECT; + if (co->warn_implicit_abstract) + { +- warning ("object type `%s' is implicitly abstract because", object_name); +- warning (" it contains abstract method `%s'", IDENTIFIER_NAME (DECL_NAME (field))); ++ gpc_warning ("object type `%s' is implicitly abstract because", object_name); ++ gpc_warning (" it contains abstract method `%s'", IDENTIFIER_NAME (DECL_NAME (field))); + } + } + method = convert (ptr_type_node, integer_zero_node); +@@ -797,15 +797,16 @@ + + if (TYPE_LANG_CODE (type) == PASCAL_LANG_ABSTRACT_OBJECT) + { +- /* Set `Size' and `NegatedSize' to 0 for abstract objects */ +- TREE_VALUE (vmt_entry) = TREE_VALUE (TREE_CHAIN (vmt_entry)) = size_zero_node; ++ /* Set `Size' to 0 and `NegatedSize' to -1 for abstract objects */ ++ TREE_VALUE (vmt_entry) = size_zero_node; ++ TREE_VALUE (TREE_CHAIN (vmt_entry)) = size_int (-1); + if (co->warn_inherited_abstract && parent && TYPE_LANG_CODE (parent) != PASCAL_LANG_ABSTRACT_OBJECT) +- warning ("abstract object type `%s' inherits from non-abstract type `%s'", ++ gpc_warning ("abstract object type `%s' inherits from non-abstract type `%s'", + object_name, IDENTIFIER_NAME (DECL_NAME (TYPE_NAME (parent)))); + } + else if (has_virtual_method && !has_constructor && !is_class + /* && (co->pascal_dialect & B_D_PASCAL) */) +- warning ("object type has virtual method, but no constructor"); ++ gpc_warning ("object type has virtual method, but no constructor"); + + /* Now create a global var declaration (also for abstract types, + for `is', `as' and explicit parent type access via VMT). +@@ -816,13 +817,6 @@ + build_tree_list (NULL_TREE, vmt_entry), VQ_IMPLICIT | VQ_CONST | + (current_module->implementation ? VQ_STATIC : 0)); + +-#ifdef GCC_4_0 +- if (current_module->implementation || !(co->interface_only)) +- { +- mark_decl_referenced (TYPE_LANG_VMT_VAR (type)); +- make_decl_rtl (TYPE_LANG_VMT_VAR (type)); +- } +-#endif + /* Attach VMT_TYPE to the implicit VMT field of the object. + (Until here it still has the inherited type or ^void type.) + We also need this for abstract types because their methods +@@ -977,16 +971,16 @@ + { + if (op == p_is) + { +- warning ("`is' always yields `True' if the right operand"); +- warning (" is the declared type of the left operand."); ++ gpc_warning ("`is' always yields `True' if the right operand"); ++ gpc_warning (" is the declared type of the left operand."); + if (TREE_SIDE_EFFECTS (left)) +- warning (" Operand with side-effects is not evaluated."); ++ gpc_warning (" Operand with side-effects is not evaluated."); + return boolean_true_node; + } + else + { +- warning ("`as' has no effect if the right operand is"); +- warning (" the declared type of the left operand"); ++ gpc_warning ("`as' has no effect if the right operand is"); ++ gpc_warning (" the declared type of the left operand"); + return oleft; + } + } +@@ -999,10 +993,10 @@ + { + if (op == p_is) + { +- warning ("`is' always yields `False' if the left operand is not"); +- warning (" polymorphic and the right operand is not its type"); ++ gpc_warning ("`is' always yields `False' if the left operand is not"); ++ gpc_warning (" polymorphic and the right operand is not its type"); + if (TREE_SIDE_EFFECTS (left)) +- warning (" Operand with side-effects is not evaluated."); ++ gpc_warning (" Operand with side-effects is not evaluated."); + return boolean_false_node; + } + else +diff -urN gpc-20060325/p/options.c gpc-20070904/p/options.c +--- gpc-20060325/p/options.c 2006-03-03 20:14:31.000000000 +0100 ++++ gpc-20070904/p/options.c 2007-09-04 08:22:53.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -308,7 +308,7 @@ + } + else if (OPT ("-fdisable-debug-info")) + { +- warning ("`--disable-debug-info' is a temporary work-around; it may disappear in the future"); ++ gpc_warning ("`--disable-debug-info' is a temporary work-around; it may disappear in the future"); + if (write_symbols == SDB_DEBUG) /* Not all debug formats like to be reset */ + write_symbols = NO_DEBUG; + debug_info_level = DINFO_LEVEL_NONE; +@@ -454,7 +454,7 @@ + { + int limit = strtoint (arg, strlen (arg)); + if (limit <= 0) +- warning ("invalid specified set limit %s.", arg); ++ gpc_warning ("invalid specified set limit %s.", arg); + else + co->set_limit = limit; + } +@@ -682,7 +682,7 @@ + name[--length] = 0; + if (length == 0) + { +- warning ("empty Pascal compiler directive"); ++ gpc_warning ("empty Pascal compiler directive"); + return 1; + } + if (length == 2 && (name[1] == '+' || name[1] == '-')) +@@ -700,12 +700,12 @@ + else + long_name = short_option->inverted_long_name; + if (long_name[1] == '#') +- warning ("directive `{$%s}' not yet implemented", name); ++ gpc_warning ("directive `{$%s}' not yet implemented", name); + else if (long_name[1] == '!') + { + /* BP-style directive. In BP mode, ignore it for compatibility. */ + if (pedantic || !(co->pascal_dialect & U_B_D_PASCAL)) +- warning ("ignoring BP directive `{$%s}' which is unnecessary in GPC", name); ++ gpc_warning ("ignoring BP directive `{$%s}' which is unnecessary in GPC", name); + } + else if (!pascal_decode_option (1, &long_name)) + error ("internal problem: unknown short option expansion `%s'", long_name); +@@ -808,7 +808,7 @@ + case 'o': + case 's': + if (pedantic || !(co->pascal_dialect & U_B_D_PASCAL)) +- warning ("ignoring BP directive `{$%s}' which is unnecessary in GPC", name); ++ gpc_warning ("ignoring BP directive `{$%s}' which is unnecessary in GPC", name); + return 1; + /* One-letter directive already handled by the preprocessor */ + case 'i': +@@ -929,7 +929,7 @@ + } + return 1; + } +- warning ("unknown compiler directive `%s'", name); ++ gpc_warning ("unknown compiler directive `%s'", name); + return 1; + } + +@@ -1026,14 +1026,14 @@ + if (error_flag) + error ("%s", buf); + else +- warning ("%s", buf); ++ gpc_warning ("%s", buf); + *p = ' '; + buf = p; /* including the leading space */ + } + if (error_flag) + error ("%s", buf); + else +- warning ("%s", buf); ++ gpc_warning ("%s", buf); + } + + void +diff -urN gpc-20060325/p/p-tree.def gpc-20070904/p/p-tree.def +--- gpc-20060325/p/p-tree.def 2006-03-03 20:14:31.000000000 +0100 ++++ gpc-20070904/p/p-tree.def 2007-09-04 08:22:53.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -36,6 +36,9 @@ + DEFTREECODE (RANGE_CHECK_EXPR, "range_check_expr", tcc_expression, 3) + DEFTREECODE (IO_RANGE_CHECK_EXPR, "io_range_check_expr", tcc_expression, 3) + DEFTREECODE (IN_EXPR, "in_expr", tcc_binary, 2) ++#ifdef GCC_4_1 ++DEFTREECODE (PASCAL_SET_CONSTRUCTOR, "pascal_set_constructor", tcc_expression, 1) ++#endif + #else + #ifdef EGCS + DEFTREECODE (OPERATOR_DECL, "operator_decl", 'd', 0) +diff -urN gpc-20060325/p/p-version.h gpc-20070904/p/p-version.h +--- gpc-20060325/p/p-version.h 2006-03-25 02:53:09.000000000 +0100 ++++ gpc-20070904/p/p-version.h 2007-09-04 08:22:53.000000000 +0200 +@@ -3,5 +3,5 @@ + + #define GPC_MAJOR "2" + #define GPC_MINOR "1" +-#define GPC_VERSION_STRING "20060325" ++#define GPC_VERSION_STRING "20070904" + #define GPC_RELEASE_STRING GPC_VERSION_STRING +diff -urN gpc-20060325/p/parse.c gpc-20070904/p/parse.c +--- gpc-20060325/p/parse.c 2006-03-24 02:52:27.000000000 +0100 ++++ gpc-20070904/p/parse.c 2007-09-04 08:22:55.000000000 +0200 +@@ -1,7 +1,8 @@ +-/* A Bison parser, made by GNU Bison 2.1. */ ++/* A Bison parser, made by GNU Bison 2.3. */ + +-/* Skeleton parser for GLR parsing with Bison, +- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ++/* Skeleton implementation for Bison GLR parsers in C ++ ++ Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -18,13 +19,26 @@ + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +-/* This is the parser code for GLR (Generalized LR) parser. */ ++/* As a special exception, you may create a larger work that contains ++ part or all of the Bison parser skeleton and distribute that work ++ under terms of your choice, so long as that work isn't itself a ++ parser generator using the skeleton or a modified version thereof ++ as a parser skeleton. Alternatively, if you modify or redistribute ++ the parser skeleton itself, you may (at your option) remove this ++ special exception, which will cause the skeleton and the resulting ++ Bison output files to be licensed under the GNU General Public ++ License without this special exception. ++ ++ This special exception was added by the Free Software Foundation in ++ version 2.2 of Bison. */ ++ ++/* C GLR parser skeleton written by Paul Hilfinger. */ + + /* Identify Bison output. */ + #define YYBISON 1 + + /* Bison version. */ +-#define YYBISON_VERSION "2.1" ++#define YYBISON_VERSION "2.3" + + /* Skeleton name. */ + #define YYSKELETON_NAME "glr.c" +@@ -37,262 +51,39 @@ + + + +-/* Tokens. */ +-#ifndef YYTOKENTYPE +-# define YYTOKENTYPE +- /* Put the tokens into the symbol table, so that GDB and other debuggers +- know about them. */ +- enum yytokentype { +- prec_lower_than_error = 258, +- prec_if = 259, +- prec_import = 260, +- p_uses = 261, +- p_else = 262, +- p_and = 263, +- p_array = 264, +- p_begin = 265, +- p_case = 266, +- p_div = 267, +- p_do = 268, +- p_downto = 269, +- p_end = 270, +- p_file = 271, +- p_for = 272, +- p_function = 273, +- p_goto = 274, +- p_if = 275, +- p_in = 276, +- p_label = 277, +- p_mod = 278, +- p_nil = 279, +- p_not = 280, +- p_of = 281, +- p_or = 282, +- p_packed = 283, +- p_procedure = 284, +- p_to = 285, +- p_program = 286, +- p_record = 287, +- p_repeat = 288, +- p_set = 289, +- p_then = 290, +- p_type = 291, +- p_until = 292, +- p_var = 293, +- p_while = 294, +- p_with = 295, +- p_absolute = 296, +- p_abstract = 297, +- p_and_then = 298, +- p_as = 299, +- p_asm = 300, +- p_attribute = 301, +- p_bindable = 302, +- p_const = 303, +- p_constructor = 304, +- p_destructor = 305, +- p_external = 306, +- p_far = 307, +- p_finalization = 308, +- p_forward = 309, +- p_implementation = 310, +- p_import = 311, +- p_inherited = 312, +- p_initialization = 313, +- p_is = 314, +- p_near = 315, +- p_object = 316, +- p_only = 317, +- p_operator = 318, +- p_otherwise = 319, +- p_or_else = 320, +- p_pow = 321, +- p_qualified = 322, +- p_restricted = 323, +- p_shl = 324, +- p_shr = 325, +- p_unit = 326, +- p_value = 327, +- p_virtual = 328, +- p_xor = 329, +- p_asmname = 330, +- p_c = 331, +- p_c_language = 332, +- p_class = 333, +- p_override = 334, +- p_reintroduce = 335, +- p_view = 336, +- p_Addr = 337, +- p_Assigned = 338, +- p_Dispose = 339, +- p_Exit = 340, +- p_FormatString = 341, +- p_New = 342, +- p_Return = 343, +- p_StringOf = 344, +- LEX_INTCONST = 345, +- LEX_INTCONST_BASE = 346, +- LEX_STRCONST = 347, +- LEX_REALCONST = 348, +- LEX_BUILTIN_PROCEDURE = 349, +- LEX_BUILTIN_PROCEDURE_WRITE = 350, +- LEX_BUILTIN_FUNCTION = 351, +- LEX_ID = 352, +- LEX_CARET_WHITE = 353, +- LEX_CARET_LETTER = 354, +- LEX_ASSIGN = 355, +- LEX_RENAME = 356, +- LEX_RANGE = 357, +- LEX_ELLIPSIS = 358, +- LEX_CONST_EQUAL = 359, +- LEX_SYMDIFF = 360, +- LEX_NE = 361, +- LEX_GE = 362, +- LEX_LE = 363, +- LEX_POWER = 364, +- LEX_BPPLUS = 365, +- LEX_BPMINUS = 366, +- LEX_CEIL_PLUS = 367, +- LEX_CEIL_MINUS = 368, +- LEX_FLOOR_PLUS = 369, +- LEX_FLOOR_MINUS = 370, +- LEX_CEIL_MULT = 371, +- LEX_CEIL_DIV = 372, +- LEX_FLOOR_MULT = 373, +- LEX_FLOOR_DIV = 374 +- }; +-#endif +-/* Tokens. */ +-#define prec_lower_than_error 258 +-#define prec_if 259 +-#define prec_import 260 +-#define p_uses 261 +-#define p_else 262 +-#define p_and 263 +-#define p_array 264 +-#define p_begin 265 +-#define p_case 266 +-#define p_div 267 +-#define p_do 268 +-#define p_downto 269 +-#define p_end 270 +-#define p_file 271 +-#define p_for 272 +-#define p_function 273 +-#define p_goto 274 +-#define p_if 275 +-#define p_in 276 +-#define p_label 277 +-#define p_mod 278 +-#define p_nil 279 +-#define p_not 280 +-#define p_of 281 +-#define p_or 282 +-#define p_packed 283 +-#define p_procedure 284 +-#define p_to 285 +-#define p_program 286 +-#define p_record 287 +-#define p_repeat 288 +-#define p_set 289 +-#define p_then 290 +-#define p_type 291 +-#define p_until 292 +-#define p_var 293 +-#define p_while 294 +-#define p_with 295 +-#define p_absolute 296 +-#define p_abstract 297 +-#define p_and_then 298 +-#define p_as 299 +-#define p_asm 300 +-#define p_attribute 301 +-#define p_bindable 302 +-#define p_const 303 +-#define p_constructor 304 +-#define p_destructor 305 +-#define p_external 306 +-#define p_far 307 +-#define p_finalization 308 +-#define p_forward 309 +-#define p_implementation 310 +-#define p_import 311 +-#define p_inherited 312 +-#define p_initialization 313 +-#define p_is 314 +-#define p_near 315 +-#define p_object 316 +-#define p_only 317 +-#define p_operator 318 +-#define p_otherwise 319 +-#define p_or_else 320 +-#define p_pow 321 +-#define p_qualified 322 +-#define p_restricted 323 +-#define p_shl 324 +-#define p_shr 325 +-#define p_unit 326 +-#define p_value 327 +-#define p_virtual 328 +-#define p_xor 329 +-#define p_asmname 330 +-#define p_c 331 +-#define p_c_language 332 +-#define p_class 333 +-#define p_override 334 +-#define p_reintroduce 335 +-#define p_view 336 +-#define p_Addr 337 +-#define p_Assigned 338 +-#define p_Dispose 339 +-#define p_Exit 340 +-#define p_FormatString 341 +-#define p_New 342 +-#define p_Return 343 +-#define p_StringOf 344 +-#define LEX_INTCONST 345 +-#define LEX_INTCONST_BASE 346 +-#define LEX_STRCONST 347 +-#define LEX_REALCONST 348 +-#define LEX_BUILTIN_PROCEDURE 349 +-#define LEX_BUILTIN_PROCEDURE_WRITE 350 +-#define LEX_BUILTIN_FUNCTION 351 +-#define LEX_ID 352 +-#define LEX_CARET_WHITE 353 +-#define LEX_CARET_LETTER 354 +-#define LEX_ASSIGN 355 +-#define LEX_RENAME 356 +-#define LEX_RANGE 357 +-#define LEX_ELLIPSIS 358 +-#define LEX_CONST_EQUAL 359 +-#define LEX_SYMDIFF 360 +-#define LEX_NE 361 +-#define LEX_GE 362 +-#define LEX_LE 363 +-#define LEX_POWER 364 +-#define LEX_BPPLUS 365 +-#define LEX_BPMINUS 366 +-#define LEX_CEIL_PLUS 367 +-#define LEX_CEIL_MINUS 368 +-#define LEX_FLOOR_PLUS 369 +-#define LEX_FLOOR_MINUS 370 +-#define LEX_CEIL_MULT 371 +-#define LEX_CEIL_DIV 372 +-#define LEX_FLOOR_MULT 373 +-#define LEX_FLOOR_DIV 374 + + + ++#include "parse.h" + +-/* Copy the first part of user declarations. */ +-#line 63 "parse.y" ++/* Enabling traces. */ ++#ifndef YYDEBUG ++# define YYDEBUG 1 ++#endif + +-#define YYMAXDEPTH 200000 +-#include "gpc.h" +-#ifdef GCC_4_0 +-#include "cgraph.h" ++/* Enabling verbose error messages. */ ++#ifdef YYERROR_VERBOSE ++# undef YYERROR_VERBOSE ++# define YYERROR_VERBOSE 1 ++#else ++# define YYERROR_VERBOSE 0 ++#endif ++ ++/* Enabling the token table. */ ++#ifndef YYTOKEN_TABLE ++# define YYTOKEN_TABLE 0 + #endif + ++/* Default (constant) value used for initialization for null ++ right-hand sides. Unlike the standard yacc.c template, ++ here we set the default value of $$ to a zeroed-out value. ++ Since the default value is undefined, this behavior is ++ technically correct. */ ++static YYSTYPE yyval_default; ++ ++/* Copy the second part of user declarations. */ ++#line 178 "parse.y" ++ + /* A few keywords of some dialects can be parsed as regular identifiers + and checked from the parser actions => fewer special tokens. */ + #define ASSERT_ID(id, location, pseudo_keyword) \ +@@ -326,63 +117,8 @@ + #define YYREALLOC (void *) xrealloc + + +-/* Enabling traces. */ +-#ifndef YYDEBUG +-# define YYDEBUG 1 +-#endif +- +-/* Enabling verbose error messages. */ +-#ifdef YYERROR_VERBOSE +-# undef YYERROR_VERBOSE +-# define YYERROR_VERBOSE 1 +-#else +-# define YYERROR_VERBOSE 0 +-#endif +- +-/* Enabling the token table. */ +-#ifndef YYTOKEN_TABLE +-# define YYTOKEN_TABLE 0 +-#endif +- +-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +-#line 112 "parse.y" +-typedef union YYSTYPE { +- enum tree_code code; +- long itype; +- tree ttype; +-} YYSTYPE; +-/* Line 186 of glr.c. */ +-#line 356 "parse.c" +-# define YYSTYPE_IS_DECLARED 1 +-# define YYSTYPE_IS_TRIVIAL 1 +-#endif +- +-#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) +-typedef struct YYLTYPE +-{ +- +- int first_line; +- int first_column; +- int last_line; +- int last_column; +- +-} YYLTYPE; +-# define YYLTYPE_IS_DECLARED 1 +-# define YYLTYPE_IS_TRIVIAL 1 +-#endif +- +-/* Default (constant) value used for initialization for null +- right-hand sides. Unlike the standard yacc.c template, +- here we set the default value of $$ to a zeroed-out value. +- Since the default value is undefined, this behavior is +- technically correct. */ +-static YYSTYPE yyval_default; +- +-/* Copy the second part of user declarations. */ +- +- +-/* Line 217 of glr.c. */ +-#line 386 "parse.c" ++/* Line 234 of glr.c. */ ++#line 122 "parse.c" + + #include + #include +@@ -401,6 +137,31 @@ + # endif + #endif + ++/* Suppress unused-variable warnings by "using" E. */ ++#if ! defined lint || defined __GNUC__ ++# define YYUSE(e) ((void) (e)) ++#else ++# define YYUSE(e) /* empty */ ++#endif ++ ++/* Identity function, used to suppress warnings about constant conditions. */ ++#ifndef lint ++# define YYID(n) (n) ++#else ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static int ++YYID (int i) ++#else ++static int ++YYID (i) ++ int i; ++#endif ++{ ++ return i; ++} ++#endif ++ + #ifndef YYFREE + # define YYFREE free + #endif +@@ -434,7 +195,7 @@ + + #ifndef __attribute__ + /* This feature is available in gcc versions 2.5 and later. */ +-# if (!defined (__GNUC__) || __GNUC__ < 2 \ ++# if (! defined __GNUC__ || __GNUC__ < 2 \ + || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__) + # define __attribute__(Spec) /* empty */ + # endif +@@ -446,23 +207,23 @@ + # define YYASSERT(condition) ((void) ((condition) || (abort (), 0))) + #endif + +-/* YYFINAL -- State number of the termination state. */ ++/* YYFINAL -- State number of the termination state. */ + #define YYFINAL 70 + /* YYLAST -- Last index in YYTABLE. */ + #define YYLAST 8810 + +-/* YYNTOKENS -- Number of terminals. */ ++/* YYNTOKENS -- Number of terminals. */ + #define YYNTOKENS 139 +-/* YYNNTS -- Number of nonterminals. */ ++/* YYNNTS -- Number of nonterminals. */ + #define YYNNTS 294 +-/* YYNRULES -- Number of rules. */ ++/* YYNRULES -- Number of rules. */ + #define YYNRULES 797 +-/* YYNRULES -- Number of states. */ ++/* YYNRULES -- Number of states. */ + #define YYNSTATES 1330 +-/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */ ++/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */ + #define YYMAXRHS 12 + /* YYMAXLEFT -- Maximum number of symbols to the left of a handle +- accessed by $0, $-1, etc., in any rule. */ ++ accessed by $0, $-1, etc., in any rule. */ + #define YYMAXLEFT 0 + + /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */ +@@ -603,7 +364,7 @@ + 2382, 2384, 2386, 2388, 2390, 2392, 2394, 2395 + }; + +-/* YYRHS -- A `-1'-separated list of the rules' RHS. */ ++/* YYRHS -- A `-1'-separated list of the rules' RHS. */ + static const short int yyrhs[] = + { + 140, 0, -1, -1, 141, -1, -1, -1, 173, 176, +@@ -851,92 +612,92 @@ + /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ + static const unsigned short int yyrline[] = + { +- 0, 216, 216, 217, 229, 231, 228, 234, 240, 242, +- 239, 245, 246, 248, 247, 256, 258, 255, 264, 263, +- 270, 272, 269, 279, 278, 286, 285, 291, 293, 291, +- 298, 299, 304, 303, 306, 308, 307, 311, 316, 315, +- 321, 325, 327, 328, 329, 334, 333, 341, 340, 348, +- 349, 351, 356, 361, 362, 367, 368, 372, 373, 375, +- 377, 379, 384, 389, 391, 392, 397, 402, 403, 405, +- 407, 409, 414, 416, 418, 423, 423, 427, 429, 433, +- 434, 435, 440, 445, 446, 450, 451, 453, 458, 459, +- 461, 463, 465, 470, 475, 476, 482, 483, 488, 489, +- 494, 495, 500, 500, 503, 505, 511, 512, 517, 518, +- 519, 525, 526, 531, 532, 532, 535, 540, 545, 546, +- 547, 552, 557, 558, 563, 563, 579, 582, 581, 585, +- 592, 594, 596, 598, 600, 602, 606, 607, 612, 613, +- 614, 618, 620, 629, 630, 635, 634, 659, 664, 665, +- 670, 671, 674, 673, 680, 681, 686, 688, 693, 695, +- 694, 702, 707, 708, 710, 711, 713, 715, 719, 730, +- 732, 729, 746, 745, 752, 754, 751, 764, 766, 763, +- 776, 775, 784, 791, 797, 806, 808, 813, 814, 816, +- 818, 820, 824, 829, 830, 836, 836, 852, 853, 858, +- 859, 861, 863, 864, 865, 866, 868, 869, 874, 876, +- 884, 887, 889, 891, 893, 898, 900, 901, 903, 905, +- 905, 907, 909, 913, 914, 919, 920, 922, 924, 926, +- 931, 933, 939, 940, 942, 947, 948, 952, 953, 955, +- 957, 959, 963, 969, 970, 975, 977, 979, 981, 986, +- 987, 989, 991, 993, 997, 1002, 1007, 1008, 1012, 1014, +- 1019, 1021, 1023, 1025, 1027, 1031, 1033, 1042, 1044, 1046, +- 1048, 1053, 1055, 1061, 1065, 1071, 1070, 1077, 1078, 1080, +- 1085, 1086, 1090, 1091, 1092, 1097, 1098, 1100, 1105, 1107, +- 1114, 1113, 1117, 1123, 1129, 1131, 1133, 1135, 1137, 1139, +- 1143, 1144, 1146, 1151, 1152, 1154, 1161, 1172, 1175, 1177, +- 1174, 1186, 1187, 1191, 1198, 1197, 1202, 1201, 1213, 1220, +- 1219, 1223, 1229, 1238, 1239, 1243, 1248, 1250, 1253, 1252, +- 1256, 1258, 1260, 1262, 1264, 1269, 1270, 1272, 1277, 1282, +- 1283, 1288, 1289, 1291, 1293, 1295, 1297, 1302, 1303, 1307, +- 1308, 1312, 1313, 1315, 1320, 1320, 1323, 1324, 1326, 1328, +- 1330, 1332, 1337, 1338, 1340, 1342, 1346, 1348, 1350, 1352, +- 1354, 1356, 1363, 1362, 1369, 1371, 1373, 1377, 1378, 1383, +- 1385, 1389, 1390, 1395, 1396, 1401, 1402, 1403, 1407, 1412, +- 1413, 1417, 1419, 1428, 1429, 1431, 1433, 1437, 1442, 1447, +- 1448, 1454, 1459, 1460, 1464, 1466, 1468, 1470, 1467, 1475, +- 1477, 1482, 1486, 1486, 1492, 1493, 1494, 1501, 1502, 1505, +- 1504, 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1521, 1523, +- 1526, 1525, 1534, 1536, 1533, 1555, 1557, 1559, 1554, 1563, +- 1565, 1562, 1569, 1568, 1573, 1572, 1576, 1581, 1586, 1587, +- 1589, 1591, 1593, 1598, 1600, 1606, 1605, 1616, 1623, 1628, +- 1630, 1635, 1636, 1641, 1642, 1644, 1646, 1648, 1654, 1653, +- 1660, 1661, 1663, 1665, 1667, 1671, 1673, 1675, 1677, 1682, +- 1684, 1686, 1691, 1692, 1697, 1698, 1703, 1705, 1707, 1709, +- 1711, 1713, 1715, 1717, 1719, 1721, 1727, 1728, 1733, 1734, +- 1738, 1739, 1744, 1749, 1751, 1758, 1771, 1773, 1778, 1779, +- 1781, 1783, 1786, 1785, 1792, 1793, 1795, 1798, 1797, 1804, +- 1805, 1807, 1809, 1811, 1813, 1818, 1820, 1822, 1823, 1824, +- 1826, 1827, 1832, 1833, 1834, 1838, 1839, 1843, 1848, 1850, +- 1855, 1856, 1857, 1862, 1863, 1863, 1863, 1863, 1863, 1863, +- 1863, 1863, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, +- 1864, 1868, 1880, 1894, 1895, 1900, 1902, 1906, 1907, 1909, +- 1911, 1913, 1915, 1917, 1919, 1921, 1923, 1925, 1927, 1929, +- 1931, 1933, 1935, 1937, 1942, 1943, 1945, 1954, 1958, 1960, +- 1962, 1964, 1969, 1970, 1972, 1974, 1980, 1982, 1984, 1989, +- 1994, 1995, 1997, 1999, 2000, 2004, 2005, 2010, 2012, 2017, +- 2019, 2024, 2029, 2034, 2036, 2038, 2040, 2042, 2047, 2048, +- 2050, 2055, 2056, 2061, 2063, 2068, 2069, 2071, 2073, 2075, +- 2080, 2082, 2084, 2089, 2091, 2096, 2097, 2099, 2101, 2106, +- 2108, 2115, 2116, 2120, 2121, 2122, 2126, 2127, 2128, 2129, +- 2130, 2131, 2132, 2136, 2137, 2138, 2139, 2140, 2141, 2145, +- 2146, 2147, 2148, 2149, 2150, 2154, 2155, 2156, 2157, 2161, +- 2162, 2163, 2164, 2168, 2171, 2172, 2173, 2174, 2175, 2176, +- 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, +- 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, +- 2202, 2203, 2204, 2208, 2209, 2210, 2211, 2215, 2216, 2217, +- 2218, 2224, 2225, 2229, 2234, 2239, 2241, 2243, 2249, 2251, +- 2255, 2257, 2262, 2263, 2268, 2273, 2274, 2275, 2276, 2277, +- 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, +- 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, +- 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, +- 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, +- 2318, 2322, 2327, 2328, 2329, 2330, 2331, 2333, 2334, 2335, +- 2339, 2347, 2352, 2357, 2361, 2366, 2371, 2377, 2378, 2383, +- 2384, 2385, 2389, 2390, 2394, 2395, 2401, 2405 ++ 0, 218, 218, 219, 231, 233, 230, 236, 242, 244, ++ 241, 247, 248, 250, 249, 258, 260, 257, 266, 265, ++ 272, 274, 271, 281, 280, 288, 287, 293, 295, 293, ++ 300, 301, 306, 305, 308, 310, 309, 313, 318, 317, ++ 323, 327, 329, 330, 331, 336, 335, 343, 342, 350, ++ 351, 353, 358, 363, 364, 369, 370, 374, 375, 377, ++ 379, 381, 386, 391, 393, 394, 399, 404, 405, 407, ++ 409, 411, 416, 418, 420, 425, 425, 429, 431, 435, ++ 436, 437, 442, 447, 448, 452, 453, 455, 460, 461, ++ 463, 465, 467, 472, 477, 478, 484, 485, 490, 491, ++ 496, 497, 502, 502, 505, 507, 513, 514, 519, 520, ++ 521, 527, 528, 533, 534, 534, 537, 542, 547, 548, ++ 549, 554, 559, 560, 565, 565, 581, 584, 583, 587, ++ 594, 596, 598, 600, 602, 604, 608, 609, 614, 615, ++ 616, 620, 622, 631, 632, 637, 636, 661, 666, 667, ++ 672, 673, 676, 675, 682, 683, 688, 690, 695, 697, ++ 696, 704, 709, 710, 712, 713, 715, 717, 721, 732, ++ 734, 731, 748, 747, 754, 756, 753, 766, 768, 765, ++ 778, 777, 786, 793, 799, 808, 810, 815, 816, 818, ++ 820, 822, 826, 831, 832, 838, 838, 854, 855, 860, ++ 861, 863, 865, 866, 867, 868, 870, 871, 876, 878, ++ 886, 889, 891, 893, 895, 900, 902, 903, 905, 907, ++ 907, 909, 911, 915, 916, 921, 922, 924, 926, 928, ++ 933, 935, 941, 942, 944, 949, 950, 954, 955, 957, ++ 959, 961, 965, 971, 972, 977, 979, 981, 983, 988, ++ 989, 991, 993, 995, 999, 1004, 1009, 1010, 1014, 1016, ++ 1021, 1023, 1025, 1027, 1029, 1033, 1035, 1044, 1046, 1048, ++ 1050, 1055, 1057, 1063, 1067, 1073, 1072, 1079, 1080, 1082, ++ 1087, 1088, 1092, 1093, 1094, 1099, 1100, 1102, 1107, 1109, ++ 1116, 1115, 1119, 1125, 1131, 1133, 1135, 1137, 1139, 1141, ++ 1145, 1146, 1148, 1153, 1154, 1156, 1163, 1174, 1177, 1179, ++ 1176, 1188, 1189, 1193, 1200, 1199, 1204, 1203, 1215, 1222, ++ 1221, 1225, 1231, 1240, 1241, 1245, 1250, 1252, 1255, 1254, ++ 1258, 1260, 1262, 1264, 1266, 1271, 1272, 1274, 1279, 1284, ++ 1285, 1290, 1291, 1293, 1295, 1297, 1299, 1304, 1305, 1309, ++ 1310, 1314, 1315, 1317, 1322, 1322, 1325, 1326, 1328, 1330, ++ 1332, 1334, 1339, 1340, 1342, 1344, 1348, 1350, 1352, 1354, ++ 1356, 1358, 1365, 1364, 1371, 1373, 1375, 1379, 1380, 1385, ++ 1387, 1391, 1392, 1397, 1398, 1403, 1404, 1405, 1409, 1414, ++ 1415, 1419, 1421, 1430, 1431, 1433, 1435, 1439, 1444, 1449, ++ 1450, 1456, 1461, 1462, 1466, 1468, 1470, 1472, 1469, 1477, ++ 1479, 1484, 1488, 1488, 1494, 1495, 1496, 1503, 1504, 1507, ++ 1506, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1523, 1525, ++ 1528, 1527, 1536, 1538, 1535, 1557, 1559, 1561, 1556, 1565, ++ 1567, 1564, 1571, 1570, 1575, 1574, 1578, 1583, 1588, 1589, ++ 1591, 1593, 1595, 1600, 1602, 1608, 1607, 1618, 1625, 1630, ++ 1632, 1637, 1638, 1643, 1644, 1646, 1648, 1650, 1656, 1655, ++ 1662, 1663, 1665, 1667, 1669, 1673, 1675, 1677, 1679, 1684, ++ 1686, 1688, 1693, 1694, 1699, 1700, 1705, 1707, 1709, 1711, ++ 1713, 1715, 1717, 1719, 1721, 1723, 1729, 1730, 1735, 1736, ++ 1740, 1741, 1746, 1751, 1753, 1760, 1773, 1775, 1780, 1781, ++ 1783, 1785, 1788, 1787, 1794, 1795, 1797, 1800, 1799, 1806, ++ 1807, 1809, 1811, 1813, 1815, 1820, 1822, 1824, 1825, 1826, ++ 1828, 1829, 1834, 1835, 1836, 1840, 1841, 1845, 1850, 1852, ++ 1857, 1858, 1859, 1864, 1865, 1865, 1865, 1865, 1865, 1865, ++ 1865, 1865, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, ++ 1866, 1870, 1882, 1896, 1897, 1902, 1904, 1908, 1909, 1911, ++ 1913, 1915, 1917, 1919, 1921, 1923, 1925, 1927, 1929, 1931, ++ 1933, 1935, 1937, 1939, 1944, 1945, 1947, 1956, 1960, 1962, ++ 1964, 1966, 1971, 1972, 1974, 1976, 1982, 1984, 1986, 1991, ++ 1996, 1997, 1999, 2001, 2002, 2006, 2007, 2012, 2014, 2019, ++ 2021, 2026, 2031, 2036, 2038, 2040, 2042, 2044, 2049, 2050, ++ 2052, 2057, 2058, 2063, 2065, 2070, 2071, 2073, 2075, 2077, ++ 2082, 2084, 2086, 2091, 2093, 2098, 2099, 2101, 2103, 2108, ++ 2110, 2117, 2118, 2122, 2123, 2124, 2128, 2129, 2130, 2131, ++ 2132, 2133, 2134, 2138, 2139, 2140, 2141, 2142, 2143, 2147, ++ 2148, 2149, 2150, 2151, 2152, 2156, 2157, 2158, 2159, 2163, ++ 2164, 2165, 2166, 2170, 2173, 2174, 2175, 2176, 2177, 2178, ++ 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, ++ 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, ++ 2204, 2205, 2206, 2210, 2211, 2212, 2213, 2217, 2218, 2219, ++ 2220, 2226, 2227, 2231, 2236, 2241, 2243, 2245, 2251, 2253, ++ 2257, 2259, 2264, 2265, 2270, 2275, 2276, 2277, 2278, 2279, ++ 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, ++ 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, ++ 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, ++ 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, ++ 2320, 2324, 2329, 2330, 2331, 2332, 2333, 2335, 2336, 2337, ++ 2341, 2349, 2354, 2359, 2363, 2368, 2373, 2379, 2380, 2385, ++ 2386, 2387, 2391, 2392, 2396, 2397, 2403, 2407 + }; + #endif + + #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. +- First, the terminals, then, starting at YYNTOKENS, nonterminals. */ ++ First, the terminals, then, starting at YYNTOKENS, nonterminals. */ + static const char *const yytname[] = + { + "$end", "error", "$undefined", "prec_lower_than_error", "prec_if", +@@ -1221,7 +982,7 @@ + 1, 1, 1, 1, 1, 1, 0, 1 + }; + +-/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */ ++/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */ + static const unsigned char yydprec[] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +@@ -1306,7 +1067,7 @@ + 0, 0, 0, 0, 0, 0, 0, 0 + }; + +-/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */ ++/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */ + static const unsigned char yymerger[] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +@@ -1531,7 +1292,7 @@ + 290, 288, 232, 0, 0, 0, 254, 291, 787, 244 + }; + +-/* YYPDEFGOTO[NTERM-NUM]. */ ++/* YYPDEFGOTO[NTERM-NUM]. */ + static const short int yydefgoto[] = + { + -1, 4, 5, 85, 184, 6, 133, 453, 71, 107, +@@ -4587,7 +4348,7 @@ + #ifndef YYLLOC_DEFAULT + # define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ +- if (N) \ ++ if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ +@@ -4601,7 +4362,7 @@ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ +- while (0) ++ while (YYID (0)) + + /* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know +@@ -4609,8 +4370,8 @@ + + # define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ +- (Loc).first_line, (Loc).first_column, \ +- (Loc).last_line, (Loc).last_column) ++ (Loc).first_line, (Loc).first_column, \ ++ (Loc).last_line, (Loc).last_column) + #endif + + +@@ -4636,62 +4397,74 @@ + + #define YYCHK(YYE) \ + do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \ +- while (0) ++ while (YYID (0)) + + #if YYDEBUG + +-#if ! defined (YYFPRINTF) ++# ifndef YYFPRINTF + # define YYFPRINTF fprintf +-#endif ++# endif + + # define YYDPRINTF(Args) \ + do { \ + if (yydebug) \ + YYFPRINTF Args; \ +-} while (0) ++} while (YYID (0)) ++ + + /*--------------------------------. + | Print this symbol on YYOUTPUT. | + `--------------------------------*/ + ++/*ARGSUSED*/ + static void +-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) ++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) + { +- /* Pacify ``unused variable'' warnings. */ +- (void) yyvaluep; +- (void) yylocationp; +- +- if (yytype < YYNTOKENS) +- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +- else +- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); +- +- YY_LOCATION_PRINT (yyoutput, *yylocationp); +- YYFPRINTF (yyoutput, ": "); +- ++ if (!yyvaluep) ++ return; ++ YYUSE (yylocationp); + # ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); ++# else ++ YYUSE (yyoutput); + # endif + switch (yytype) + { + default: +- break; ++ break; + } +- YYFPRINTF (yyoutput, ")"); + } + + +-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +-do { \ +- if (yydebug) \ +- { \ +- YYFPRINTF (stderr, "%s ", Title); \ +- yysymprint (stderr, \ +- Type, Value, Location); \ +- YYFPRINTF (stderr, "\n"); \ +- } \ +-} while (0) ++/*--------------------------------. ++| Print this symbol on YYOUTPUT. | ++`--------------------------------*/ ++ ++static void ++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) ++{ ++ if (yytype < YYNTOKENS) ++ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); ++ else ++ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); ++ ++ YY_LOCATION_PRINT (yyoutput, *yylocationp); ++ YYFPRINTF (yyoutput, ": "); ++ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp); ++ YYFPRINTF (yyoutput, ")"); ++} ++ ++# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ ++do { \ ++ if (yydebug) \ ++ { \ ++ YYFPRINTF (stderr, "%s ", Title); \ ++ yy_symbol_print (stderr, Type, \ ++ Value, Location); \ ++ YYFPRINTF (stderr, "\n"); \ ++ } \ ++} while (YYID (0)) + + /* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +@@ -4724,23 +4497,38 @@ + allocation. This is to allow allocation and initialization + to be completed by functions that call yyexpandGLRStack before the + stack is expanded, thus insuring that all necessary pointers get +- properly redirected to new data. */ ++ properly redirected to new data. */ + #define YYHEADROOM 2 + + #ifndef YYSTACKEXPANDABLE +-# if (! defined (__cplusplus) \ +- || (defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \ +- && defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)) ++# if (! defined __cplusplus \ ++ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ ++ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)) + # define YYSTACKEXPANDABLE 1 + # else + # define YYSTACKEXPANDABLE 0 + # endif + #endif + ++#if YYSTACKEXPANDABLE ++# define YY_RESERVE_GLRSTACK(Yystack) \ ++ do { \ ++ if (Yystack->yyspaceLeft < YYHEADROOM) \ ++ yyexpandGLRStack (Yystack); \ ++ } while (YYID (0)) ++#else ++# define YY_RESERVE_GLRSTACK(Yystack) \ ++ do { \ ++ if (Yystack->yyspaceLeft < YYHEADROOM) \ ++ yyMemoryExhausted (Yystack); \ ++ } while (YYID (0)) ++#endif ++ ++ + #if YYERROR_VERBOSE + + # ifndef yystpcpy +-# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) ++# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE + # define yystpcpy stpcpy + # else + /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in +@@ -4822,18 +4610,18 @@ + typedef short int yyItemNum; + + typedef struct yyGLRState yyGLRState; ++typedef struct yyGLRStateSet yyGLRStateSet; + typedef struct yySemanticOption yySemanticOption; + typedef union yyGLRStackItem yyGLRStackItem; + typedef struct yyGLRStack yyGLRStack; +-typedef struct yyGLRStateSet yyGLRStateSet; + + struct yyGLRState { +- /** Type tag: always true. */ ++ /** Type tag: always true. */ + yybool yyisState; +- /** Type tag for yysemantics. If true, yysval applies, otherwise +- * yyfirstVal applies. */ ++ /** Type tag for yysemantics. If true, yysval applies, otherwise ++ * yyfirstVal applies. */ + yybool yyresolved; +- /** Number of corresponding LALR(1) machine state. */ ++ /** Number of corresponding LALR(1) machine state. */ + yyStateNum yylrState; + /** Preceding state in this stack */ + yyGLRState* yypred; +@@ -4842,34 +4630,43 @@ + union { + /** First in a chain of alternative reductions producing the + * non-terminal corresponding to this state, threaded through +- * yynext. */ ++ * yynext. */ + yySemanticOption* yyfirstVal; +- /** Semantic value for this state. */ ++ /** Semantic value for this state. */ + YYSTYPE yysval; + } yysemantics; +- /** Source location for this state. */ ++ /** Source location for this state. */ + YYLTYPE yyloc; + }; + + struct yyGLRStateSet { + yyGLRState** yystates; ++ /** During nondeterministic operation, yylookaheadNeeds tracks which ++ * stacks have actually needed the current lookahead. During deterministic ++ * operation, yylookaheadNeeds[0] is not maintained since it would merely ++ * duplicate yychar != YYEMPTY. */ ++ yybool* yylookaheadNeeds; + size_t yysize, yycapacity; + }; + + struct yySemanticOption { +- /** Type tag: always false. */ ++ /** Type tag: always false. */ + yybool yyisState; + /** Rule number for this reduction */ + yyRuleNum yyrule; +- /** The last RHS state in the list of states to be reduced. */ ++ /** The last RHS state in the list of states to be reduced. */ + yyGLRState* yystate; +- /** Next sibling in chain of options. To facilitate merging, +- * options are chained in decreasing order by address. */ ++ /** The lookahead for this reduction. */ ++ int yyrawchar; ++ YYSTYPE yyval; ++ YYLTYPE yyloc; ++ /** Next sibling in chain of options. To facilitate merging, ++ * options are chained in decreasing order by address. */ + yySemanticOption* yynext; + }; + +-/** Type of the items in the GLR stack. The yyisState field +- * indicates which item of the union is valid. */ ++/** Type of the items in the GLR stack. The yyisState field ++ * indicates which item of the union is valid. */ + union yyGLRStackItem { + yyGLRState yystate; + yySemanticOption yyoption; +@@ -4880,7 +4677,6 @@ + /* To compute the location of the error token. */ + yyGLRStackItem yyerror_range[3]; + +- yySymbol* yytokenp; + YYJMP_BUF yyexception_buffer; + yyGLRStackItem* yyitems; + yyGLRStackItem* yynextFree; +@@ -4890,24 +4686,26 @@ + yyGLRStateSet yytops; + }; + +-static void yyexpandGLRStack (yyGLRStack* yystack); ++#if YYSTACKEXPANDABLE ++static void yyexpandGLRStack (yyGLRStack* yystackp); ++#endif + +-static void yyFail (yyGLRStack* yystack, const char* yymsg) ++static void yyFail (yyGLRStack* yystackp, const char* yymsg) + __attribute__ ((__noreturn__)); + static void +-yyFail (yyGLRStack* yystack, const char* yymsg) ++yyFail (yyGLRStack* yystackp, const char* yymsg) + { + if (yymsg != NULL) + yyerror (yymsg); +- YYLONGJMP (yystack->yyexception_buffer, 1); ++ YYLONGJMP (yystackp->yyexception_buffer, 1); + } + +-static void yyMemoryExhausted (yyGLRStack* yystack) ++static void yyMemoryExhausted (yyGLRStack* yystackp) + __attribute__ ((__noreturn__)); + static void +-yyMemoryExhausted (yyGLRStack* yystack) ++yyMemoryExhausted (yyGLRStack* yystackp) + { +- YYLONGJMP (yystack->yyexception_buffer, 2); ++ YYLONGJMP (yystackp->yyexception_buffer, 2); + } + + #if YYDEBUG || YYERROR_VERBOSE +@@ -4924,8 +4722,7 @@ + + /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting + * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred +- * containing the pointer to the next state in the chain. Assumes +- * YYLOW1 < YYLOW0. */ ++ * containing the pointer to the next state in the chain. */ + static void yyfillin (yyGLRStackItem *, int, int) __attribute__ ((__unused__)); + static void + yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1) +@@ -4944,8 +4741,8 @@ + } + + /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in +- YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1. +- For convenience, always return YYLOW1. */ ++ * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1. ++ * For convenience, always return YYLOW1. */ + static inline int yyfill (yyGLRStackItem *, int *, int, yybool) + __attribute__ ((__unused__)); + static inline int +@@ -4962,21 +4759,20 @@ + /** Perform user action for rule number YYN, with RHS length YYRHSLEN, + * and top stack item YYVSP. YYLVALP points to place to put semantic + * value ($$), and yylocp points to place for location information +- * (@$). Returns yyok for normal return, yyaccept for YYACCEPT, +- * yyerr for YYERROR, yyabort for YYABORT. */ +-static YYRESULTTAG ++ * (@$). Returns yyok for normal return, yyaccept for YYACCEPT, ++ * yyerr for YYERROR, yyabort for YYABORT. */ ++/*ARGSUSED*/ static YYRESULTTAG + yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp, + YYSTYPE* yyvalp, + YYLTYPE* YYOPTIONAL_LOC (yylocp), +- yyGLRStack* yystack +- ) ++ yyGLRStack* yystackp ++ ) + { + yybool yynormal __attribute__ ((__unused__)) = +- (yystack->yysplitPoint == NULL); ++ (yystackp->yysplitPoint == NULL); + int yylow; +- + # undef yyerrok +-# define yyerrok (yystack->yyerrState = 0) ++# define yyerrok (yystackp->yyerrState = 0) + # undef YYACCEPT + # define YYACCEPT return yyaccept + # undef YYABORT +@@ -4984,9 +4780,9 @@ + # undef YYERROR + # define YYERROR return yyerrok, yyerr + # undef YYRECOVERING +-# define YYRECOVERING (yystack->yyerrState != 0) ++# define YYRECOVERING() (yystackp->yyerrState != 0) + # undef yyclearin +-# define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY) ++# define yyclearin (yychar = YYEMPTY) + # undef YYFILL + # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal) + # undef YYBACKUP +@@ -4999,18 +4795,18 @@ + *yyvalp = yyval_default; + else + *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval; +- YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen); +- yystack->yyerror_range[1].yystate.yyloc = *yylocp; ++ YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen); ++ yystackp->yyerror_range[1].yystate.yyloc = *yylocp; + + switch (yyn) + { + case 2: +-#line 216 "parse.y" ++#line 218 "parse.y" + { error ("empty input file"); ;} + break; + + case 3: +-#line 218 "parse.y" ++#line 220 "parse.y" + { + if (co->ignore_garbage_after_dot) + { +@@ -5021,61 +4817,61 @@ + break; + + case 4: +-#line 229 "parse.y" +- { initialize_module (TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) : NULL_TREE, TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))), 0); ;} ++#line 231 "parse.y" ++ { initialize_module (TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) : NULL_TREE, TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype))), 0); ;} + break; + + case 5: +-#line 231 "parse.y" ++#line 233 "parse.y" + { start_main_program (); ;} + break; + + case 6: +-#line 233 "parse.y" ++#line 235 "parse.y" + { finish_main_program (); ;} + break; + + case 7: +-#line 235 "parse.y" ++#line 237 "parse.y" + { finalize_module (0); ;} + break; + + case 8: +-#line 240 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_interface); initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), 1); ;} ++#line 242 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yyloc), p_interface); initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), 1); ;} + break; + + case 9: +-#line 242 "parse.y" ++#line 244 "parse.y" + { start_unit_implementation (); ;} + break; + + case 10: +-#line 244 "parse.y" ++#line 246 "parse.y" + { check_forward_decls (1); ;} + break; + + case 13: +-#line 248 "parse.y" ++#line 250 "parse.y" + { ((*yyvalp).ttype) = current_module->name; finalize_module (1); ;} + break; + + case 14: +-#line 250 "parse.y" ++#line 252 "parse.y" + { +- if ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype) && current_module->name != (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) ++ if ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype) && current_module->name != (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)) + error ("implementation of module `%s' following interface of module `%s'", +- IDENTIFIER_NAME (current_module->name), IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ++ IDENTIFIER_NAME (current_module->name), IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype))); + ;} + break; + + case 15: +-#line 256 "parse.y" +- { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 2); ;} ++#line 258 "parse.y" ++ { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 2); ;} + break; + + case 16: +-#line 258 "parse.y" ++#line 260 "parse.y" + { + if (co->interface_only) + exit_compilation (); +@@ -5083,357 +4879,357 @@ + break; + + case 18: +-#line 264 "parse.y" +- { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 4); ;} ++#line 266 "parse.y" ++ { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 4); ;} + break; + + case 20: +-#line 270 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_interface); ;} ++#line 272 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yyloc), p_interface); ;} + break; + + case 21: +-#line 272 "parse.y" +- { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 2); ;} ++#line 274 "parse.y" ++ { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), 2); ;} + break; + + case 22: +-#line 274 "parse.y" ++#line 276 "parse.y" + { clear_forward_decls (); /* don't complain in poplevel */ ;} + break; + + case 23: +-#line 279 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_export); start_module_interface (); ;} ++#line 281 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_export); start_module_interface (); ;} + break; + + case 24: +-#line 281 "parse.y" ++#line 283 "parse.y" + { create_gpi_files (); ;} + break; + + case 25: +-#line 286 "parse.y" +- { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), NULL_TREE, 3); ;} ++#line 288 "parse.y" ++ { initialize_module ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, 3); ;} + break; + + case 27: +-#line 291 "parse.y" ++#line 293 "parse.y" + { current_module->implementation = 1; ;} + break; + + case 28: +-#line 293 "parse.y" ++#line 295 "parse.y" + { check_forward_decls (1); ;} + break; + + case 30: +-#line 298 "parse.y" ++#line 300 "parse.y" + { chk_dialect ("units without `implementation' part are", U_M_PASCAL); ;} + break; + + case 32: +-#line 304 "parse.y" ++#line 306 "parse.y" + { start_constructor (0); ;} + break; + + case 35: +-#line 308 "parse.y" ++#line 310 "parse.y" + { start_destructor (); ;} + break; + + case 36: +-#line 310 "parse.y" ++#line 312 "parse.y" + { finish_destructor (); ;} + break; + + case 38: +-#line 316 "parse.y" ++#line 318 "parse.y" + { start_constructor (0); ;} + break; + + case 40: +-#line 322 "parse.y" ++#line 324 "parse.y" + { finish_constructor (); ;} + break; + + case 45: +-#line 334 "parse.y" ++#line 336 "parse.y" + { chk_dialect_name ("to begin do", E_O_PASCAL); start_constructor (0); ;} + break; + + case 46: +-#line 336 "parse.y" ++#line 338 "parse.y" + { finish_constructor (); ;} + break; + + case 47: +-#line 341 "parse.y" ++#line 343 "parse.y" + { chk_dialect_name ("to end do", E_O_PASCAL); start_destructor (); ;} + break; + + case 48: +-#line 343 "parse.y" ++#line 345 "parse.y" + { finish_destructor (); ;} + break; + + case 49: +-#line 348 "parse.y" ++#line 350 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} + break; + + case 50: +-#line 350 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 352 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 51: +-#line 352 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 354 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 52: +-#line 357 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) : NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 359 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype) ? TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)) : NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 54: +-#line 363 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} ++#line 365 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 58: +-#line 374 "parse.y" ++#line 376 "parse.y" + { yyerrok; ;} + break; + + case 59: +-#line 376 "parse.y" ++#line 378 "parse.y" + { error ("module specifications need an export part"); ;} + break; + + case 60: +-#line 378 "parse.y" +- { warning ("missing semicolon"); yyerrok; ;} ++#line 380 "parse.y" ++ { gpc_warning ("missing semicolon"); yyerrok; ;} + break; + + case 61: +-#line 380 "parse.y" ++#line 382 "parse.y" + { error ("extra semicolon"); ;} + break; + + case 62: +-#line 385 "parse.y" +- { export_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 387 "parse.y" ++ { export_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 63: +-#line 390 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} ++#line 392 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 65: +-#line 393 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 395 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 66: +-#line 398 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_all); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} ++#line 400 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_all); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} + break; + + case 68: +-#line 404 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 406 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 69: +-#line 406 "parse.y" ++#line 408 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 70: +-#line 408 "parse.y" ++#line 410 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 71: +-#line 410 "parse.y" ++#line 412 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 72: +-#line 415 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 417 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 73: +-#line 417 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 419 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 74: +-#line 419 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); TREE_READONLY (((*yyvalp).ttype)) = 1; ;} ++#line 421 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); TREE_READONLY (((*yyvalp).ttype)) = 1; ;} + break; + + case 75: +-#line 423 "parse.y" ++#line 425 "parse.y" + { do_extra_import (); ;} + break; + + case 81: +-#line 436 "parse.y" +- { warning ("missing semicolon"); yyerrok; ;} ++#line 438 "parse.y" ++ { gpc_warning ("missing semicolon"); yyerrok; ;} + break; + + case 82: +-#line 441 "parse.y" +- { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype) ? IMPORT_QUALIFIED : IMPORT_ISO, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 443 "parse.y" ++ { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype) ? IMPORT_QUALIFIED : IMPORT_ISO, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 86: +-#line 452 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 454 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 87: +-#line 454 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 456 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 89: +-#line 460 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 462 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 90: +-#line 462 "parse.y" ++#line 464 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 91: +-#line 464 "parse.y" +- { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 466 "parse.y" ++ { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 92: +-#line 466 "parse.y" ++#line 468 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 93: +-#line 471 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 473 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 95: +-#line 477 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 479 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 96: +-#line 482 "parse.y" ++#line 484 "parse.y" + { ((*yyvalp).itype) = 2 * od_none; ;} + break; + + case 97: +-#line 484 "parse.y" +- { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} ++#line 486 "parse.y" ++ { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 100: +-#line 494 "parse.y" ++#line 496 "parse.y" + { ((*yyvalp).itype) = 2 * od_none; ;} + break; + + case 101: +-#line 496 "parse.y" +- { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} ++#line 498 "parse.y" ++ { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 102: +-#line 500 "parse.y" ++#line 502 "parse.y" + { check_forward_decls (0); ;} + break; + + case 103: +-#line 502 "parse.y" +- { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ;} ++#line 504 "parse.y" ++ { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype); ;} + break; + + case 104: +-#line 504 "parse.y" ++#line 506 "parse.y" + { ((*yyvalp).itype) = od_label; ;} + break; + + case 105: +-#line 506 "parse.y" ++#line 508 "parse.y" + { ((*yyvalp).itype) = od_routine; ;} + break; + + case 106: +-#line 511 "parse.y" ++#line 513 "parse.y" + { ((*yyvalp).itype) = 2 * od_none; ;} + break; + + case 107: +-#line 513 "parse.y" +- { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} ++#line 515 "parse.y" ++ { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 110: +-#line 520 "parse.y" ++#line 522 "parse.y" + { ((*yyvalp).itype) = od_routine; ;} + break; + + case 111: +-#line 525 "parse.y" ++#line 527 "parse.y" + { ((*yyvalp).itype) = 2 * od_none; ;} + break; + + case 112: +-#line 527 "parse.y" +- { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} ++#line 529 "parse.y" ++ { ((*yyvalp).itype) = check_decl_order ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 114: +-#line 532 "parse.y" ++#line 534 "parse.y" + { check_forward_decls (0); ;} + break; + + case 115: +-#line 534 "parse.y" +- { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ;} ++#line 536 "parse.y" ++ { ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype); ;} + break; + + case 116: +-#line 536 "parse.y" ++#line 538 "parse.y" + { ((*yyvalp).itype) = od_routine; ;} + break; + + case 117: +-#line 541 "parse.y" ++#line 543 "parse.y" + { ((*yyvalp).itype) = od_uses; ;} + break; + + case 120: +-#line 548 "parse.y" +- { warning ("missing comma"); yyerrok; ;} ++#line 550 "parse.y" ++ { gpc_warning ("missing comma"); yyerrok; ;} + break; + + case 121: +-#line 553 "parse.y" +- { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, IMPORT_USES, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 555 "parse.y" ++ { import_interface ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE, IMPORT_USES, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 123: +-#line 559 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); chk_dialect ("file name specification with `in' is", BORLAND_DELPHI); ;} ++#line 561 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); chk_dialect ("file name specification with `in' is", BORLAND_DELPHI); ;} + break; + + case 124: +-#line 563 "parse.y" ++#line 565 "parse.y" + { + #ifndef EGCS97 + push_obstacks_nochange (); +@@ -5443,84 +5239,84 @@ + break; + + case 125: +-#line 570 "parse.y" ++#line 572 "parse.y" + { + #ifndef EGCS97 + pop_obstacks (); + #endif +- ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ++ ((*yyvalp).itype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype); + ;} + break; + + case 126: +-#line 580 "parse.y" ++#line 582 "parse.y" + { ((*yyvalp).itype) = od_const; ;} + break; + + case 127: +-#line 582 "parse.y" ++#line 584 "parse.y" + { current_type_list = build_tree_list (NULL_TREE, NULL_TREE); ;} + break; + + case 128: +-#line 584 "parse.y" ++#line 586 "parse.y" + { declare_types (); ((*yyvalp).itype) = od_type; ;} + break; + + case 129: +-#line 586 "parse.y" ++#line 588 "parse.y" + { ((*yyvalp).itype) = od_var; ;} + break; + + case 130: +-#line 593 "parse.y" +- { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 595 "parse.y" ++ { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 131: +-#line 595 "parse.y" +- { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 597 "parse.y" ++ { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 132: +-#line 597 "parse.y" ++#line 599 "parse.y" + { error ("non-label in label_list"); ;} + break; + + case 133: +-#line 599 "parse.y" +- { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 601 "parse.y" ++ { declare_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 134: +-#line 601 "parse.y" ++#line 603 "parse.y" + { error ("extra comma"); ;} + break; + + case 137: +-#line 608 "parse.y" ++#line 610 "parse.y" + { chk_dialect ("non-numeric labels are", B_D_M_PASCAL); ;} + break; + + case 141: +-#line 619 "parse.y" +- { declare_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 621 "parse.y" ++ { declare_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 142: +-#line 622 "parse.y" ++#line 624 "parse.y" + { + lex_const_equal = -1; +- declare_variables (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)), VQ_BP_CONST, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ++ declare_variables (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (8))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (8))].yystate.yysemantics.yysval.ttype)), VQ_BP_CONST, (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (8))].yystate.yysemantics.yysval.ttype)); + ;} + break; + + case 145: +-#line 635 "parse.y" ++#line 637 "parse.y" + { +- tree t, ids = ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); +- if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) +- && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) ++ tree t, ids = ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype)); ++ if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) ++ && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) + TREE_PRIVATE (ids) = !!allow_function_calls (0); /* kludge */ + /* With `begin var Foo: Integer; Foo := ...' where `Foo' + is a built-in identifier, parser look-ahead would already get +@@ -5532,114 +5328,114 @@ + break; + + case 146: +-#line 648 "parse.y" ++#line 650 "parse.y" + { +- tree t, ids = (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype); ++ tree t, ids = (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (8))].yystate.yysemantics.yysval.ttype); + for (t = ids; t; t = TREE_CHAIN (t)) + PASCAL_PENDING_DECLARATION (TREE_VALUE (t)) = 0; + lex_const_equal = -1; +- ((*yyvalp).ttype) = declare_variables (ids, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); +- if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) +- && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) ++ ((*yyvalp).ttype) = declare_variables (ids, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (8))].yystate.yysemantics.yysval.ttype), 0, (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (8))].yystate.yysemantics.yysval.ttype)); ++ if ((TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype)) == POINTER_TYPE || TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE) ++ && TREE_CODE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype))) == FUNCTION_TYPE) + allow_function_calls (TREE_PRIVATE (ids)); + yyerrok; + ;} + break; + + case 147: +-#line 660 "parse.y" ++#line 662 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; lex_const_equal = -1; ;} + break; + + case 149: +-#line 666 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 668 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 151: +-#line 672 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 674 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 152: +-#line 674 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_name); ;} ++#line 676 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yyloc), p_name); ;} + break; + + case 153: +-#line 676 "parse.y" +- { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype))); ;} ++#line 678 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 155: +-#line 682 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 684 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 156: +-#line 687 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 689 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 157: +-#line 689 "parse.y" +- { ((*yyvalp).ttype) = TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 691 "parse.y" ++ { ((*yyvalp).ttype) = TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 159: +-#line 695 "parse.y" ++#line 697 "parse.y" + { ((*yyvalp).itype) = allow_function_calls (0); lex_const_equal = -1; ;} + break; + + case 160: +-#line 697 "parse.y" ++#line 699 "parse.y" + { +- allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype)); +- ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ++ allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.itype)); ++ ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); + PASCAL_ABSOLUTE_CLAUSE (((*yyvalp).ttype)) = 1; + ;} + break; + + case 161: +-#line 703 "parse.y" ++#line 705 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 163: +-#line 709 "parse.y" ++#line 711 "parse.y" + { yyerrok; ;} + break; + + case 165: +-#line 712 "parse.y" ++#line 714 "parse.y" + { error ("missing semicolon"); yyerrok; ;} + break; + + case 166: +-#line 714 "parse.y" ++#line 716 "parse.y" + { error ("extra semicolon"); ;} + break; + + case 168: +-#line 720 "parse.y" ++#line 722 "parse.y" + { + lex_const_equal = -1; +- if (!EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))) ++ if (!EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))) + { +- if (PASCAL_TYPE_UNDISCRIMINATED_SCHEMA ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))) ++ if (PASCAL_TYPE_UNDISCRIMINATED_SCHEMA ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))) + chk_dialect ("undiscriminated schemata on the right side of a type definition are", GNU_PASCAL); +- build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ++ build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype)); + } + ;} + break; + + case 169: +-#line 730 "parse.y" ++#line 732 "parse.y" + { current_schema = start_struct (RECORD_TYPE); ;} + break; + + case 170: +-#line 732 "parse.y" ++#line 734 "parse.y" + { + ((*yyvalp).itype) = immediate_size_expand; + immediate_size_expand = 0; +@@ -5648,148 +5444,148 @@ + break; + + case 171: +-#line 738 "parse.y" ++#line 740 "parse.y" + { +- build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), build_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), current_schema), ++ build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.ttype), build_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype), current_schema), + NULL_TREE); +- immediate_size_expand = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.itype); ++ immediate_size_expand = (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.itype); + size_volatile--; + current_schema = NULL_TREE; + ;} + break; + + case 172: +-#line 746 "parse.y" ++#line 748 "parse.y" + { current_schema = start_struct (RECORD_TYPE); ;} + break; + + case 173: +-#line 748 "parse.y" +- { build_schema_type (error_mark_node, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, current_schema); ++#line 750 "parse.y" ++ { build_schema_type (error_mark_node, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, current_schema); + current_schema = NULL_TREE; + ;} + break; + + case 174: +-#line 752 "parse.y" +- { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 754 "parse.y" ++ { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 175: +-#line 754 "parse.y" ++#line 756 "parse.y" + { push_scope (); ;} + break; + + case 176: +-#line 756 "parse.y" ++#line 758 "parse.y" + { + lex_const_equal = -1; +- finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype) != NULL_TREE); +- pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype)); ++ finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((9) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (10))].yystate.yysemantics.yysval.ttype) != NULL_TREE); ++ pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype)); + yyerrok; + ;} + break; + + case 177: +-#line 764 "parse.y" +- { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 1); ;} ++#line 766 "parse.y" ++ { ((*yyvalp).ttype) = start_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} + break; + + case 178: +-#line 766 "parse.y" ++#line 768 "parse.y" + { push_scope (); ;} + break; + + case 179: +-#line 768 "parse.y" ++#line 770 "parse.y" + { + lex_const_equal = -1; +- finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype) != NULL_TREE); +- pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype)); ++ finish_object_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((9) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (10))].yystate.yysemantics.yysval.ttype) != NULL_TREE); ++ pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (10))].yystate.yysemantics.yysval.ttype)); + yyerrok; + ;} + break; + + case 180: +-#line 776 "parse.y" ++#line 778 "parse.y" + { push_scope (); ;} + break; + + case 181: +-#line 778 "parse.y" ++#line 780 "parse.y" + { + lex_const_equal = -1; +- finish_view_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-9)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ++ finish_view_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (10))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((9) - (10))].yystate.yysemantics.yysval.ttype)); + pop_record_level (NULL_TREE); + yyerrok; + ;} + break; + + case 182: +-#line 785 "parse.y" ++#line 787 "parse.y" + { + tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); + PASCAL_TYPE_CLASS (t) = 1; +- build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), t, NULL_TREE); +- warning("ignored parent in Delphi forward class declaration"); ++ build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), t, NULL_TREE); ++ gpc_warning ("ignored parent in Delphi forward class declaration"); + ;} + break; + + case 183: +-#line 792 "parse.y" ++#line 794 "parse.y" + { + tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); + PASCAL_TYPE_CLASS (t) = 1; +- build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), t, NULL_TREE); ++ build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), t, NULL_TREE); + ;} + break; + + case 184: +-#line 798 "parse.y" ++#line 800 "parse.y" + { + tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); + PASCAL_TYPE_CLASS (t) = 1; +- build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), t, NULL_TREE); ++ build_type_decl ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), t, NULL_TREE); + ;} + break; + + case 185: +-#line 807 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} ++#line 809 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 186: +-#line 809 "parse.y" ++#line 811 "parse.y" + { error ("invalid schema discriminants"); ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 188: +-#line 815 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 817 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 189: +-#line 817 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} ++#line 819 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} + break; + + case 190: +-#line 819 "parse.y" ++#line 821 "parse.y" + { error ("extra semicolon"); ;} + break; + + case 192: +-#line 825 "parse.y" +- { ((*yyvalp).ttype) = build_discriminants ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), current_schema); ;} ++#line 827 "parse.y" ++ { ((*yyvalp).ttype) = build_discriminants ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), current_schema); ;} + break; + + case 194: +-#line 831 "parse.y" +- { type_attributes (&((*yyvalp).ttype), TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 833 "parse.y" ++ { type_attributes (&((*yyvalp).ttype), TREE_PURPOSE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 195: +-#line 836 "parse.y" ++#line 838 "parse.y" + { + #ifndef EGCS97 + push_obstacks_nochange (); +@@ -5799,473 +5595,473 @@ + break; + + case 196: +-#line 843 "parse.y" ++#line 845 "parse.y" + { + #ifndef EGCS97 + pop_obstacks (); + #endif +- ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ++ ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); + ;} + break; + + case 198: +-#line 854 "parse.y" +- { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_BINDABLE); ;} ++#line 856 "parse.y" ++ { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_BINDABLE); ;} + break; + + case 200: +-#line 860 "parse.y" +- { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_RESTRICTED); ;} ++#line 862 "parse.y" ++ { ((*yyvalp).ttype) = pascal_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), TYPE_QUALIFIER_RESTRICTED); ;} + break; + + case 201: +-#line 862 "parse.y" +- { ((*yyvalp).ttype) = build_discriminated_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 864 "parse.y" ++ { ((*yyvalp).ttype) = build_discriminated_schema_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 205: +-#line 867 "parse.y" ++#line 869 "parse.y" + { chk_dialect ("procedural variables and types are", B_D_M_PASCAL); ;} + break; + + case 207: +-#line 870 "parse.y" +- { defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype) ? pack_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) : (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 872 "parse.y" ++ { defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype) ? pack_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) : (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 208: +-#line 875 "parse.y" +- { chk_dialect ("schema/string discriminants are", E_O_M_PASCAL); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} ++#line 877 "parse.y" ++ { chk_dialect ("schema/string discriminants are", E_O_M_PASCAL); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 209: +-#line 877 "parse.y" ++#line 879 "parse.y" + { + chk_dialect ("string capacity in brackets is", U_B_D_M_PASCAL); +- ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), 0))); ++ ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), 0))); + ;} + break; + + case 210: +-#line 886 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0))); ;} ++#line 888 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 0))); ;} + break; + + case 211: +-#line 888 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} ++#line 890 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} + break; + + case 212: +-#line 890 "parse.y" ++#line 892 "parse.y" + { error ("missing expression"); ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 213: +-#line 892 "parse.y" +- { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} ++#line 894 "parse.y" ++ { error ("missing comma"); ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, maybe_schema_discriminant (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0)))); yyerrok; ;} + break; + + case 214: +-#line 894 "parse.y" ++#line 896 "parse.y" + { error ("extra comma"); ;} + break; + + case 215: +-#line 899 "parse.y" +- { ((*yyvalp).ttype) = build_pascal_array_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); ;} ++#line 901 "parse.y" ++ { ((*yyvalp).ttype) = build_pascal_array_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 217: +-#line 902 "parse.y" +- { ((*yyvalp).ttype) = build_file_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 904 "parse.y" ++ { ((*yyvalp).ttype) = build_file_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 218: +-#line 904 "parse.y" +- { ((*yyvalp).ttype) = build_set_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 906 "parse.y" ++ { ((*yyvalp).ttype) = build_set_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 219: +-#line 905 "parse.y" ++#line 907 "parse.y" + { push_scope (); ;} + break; + + case 220: +-#line 906 "parse.y" +- { pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); yyerrok; ;} ++#line 908 "parse.y" ++ { pop_record_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype); yyerrok; ;} + break; + + case 221: +-#line 908 "parse.y" ++#line 910 "parse.y" + { ((*yyvalp).ttype) = build_record (NULL_TREE, NULL_TREE, NULL_TREE); ;} + break; + + case 224: +-#line 915 "parse.y" +- { ((*yyvalp).ttype) = TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 917 "parse.y" ++ { ((*yyvalp).ttype) = TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 226: +-#line 921 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 923 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 227: +-#line 923 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 925 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 228: +-#line 925 "parse.y" ++#line 927 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (error_mark_node, error_mark_node); ;} + break; + + case 229: +-#line 927 "parse.y" ++#line 929 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (error_mark_node, error_mark_node); ;} + break; + + case 230: +-#line 932 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 934 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 231: +-#line 934 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 936 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 232: +-#line 939 "parse.y" ++#line 941 "parse.y" + { ((*yyvalp).ttype) = build_record (NULL_TREE, NULL_TREE, NULL_TREE); ;} + break; + + case 233: +-#line 941 "parse.y" +- { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} ++#line 943 "parse.y" ++ { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} + break; + + case 234: +-#line 943 "parse.y" +- { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 945 "parse.y" ++ { ((*yyvalp).ttype) = build_record ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 238: +-#line 954 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 956 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 239: +-#line 956 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} ++#line 958 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} + break; + + case 240: +-#line 958 "parse.y" ++#line 960 "parse.y" + { error ("extra semicolon"); ;} + break; + + case 242: +-#line 964 "parse.y" +- { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 966 "parse.y" ++ { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 243: +-#line 969 "parse.y" ++#line 971 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 244: +-#line 971 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} ++#line 973 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 245: +-#line 976 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 978 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 246: +-#line 978 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 980 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), build_field ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 247: +-#line 980 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 982 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 248: +-#line 982 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 984 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 250: +-#line 988 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 990 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 251: +-#line 990 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} ++#line 992 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} + break; + + case 252: +-#line 992 "parse.y" ++#line 994 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 254: +-#line 998 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1000 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), build_field (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 255: +-#line 1003 "parse.y" ++#line 1005 "parse.y" + { chk_dialect ("type denoters (no identifiers) as variant tag type are", U_B_D_M_PASCAL); ;} + break; + + case 258: +-#line 1013 "parse.y" +- { ((*yyvalp).ttype) = build_enum_type (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1015 "parse.y" ++ { ((*yyvalp).ttype) = build_enum_type (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 259: +-#line 1015 "parse.y" ++#line 1017 "parse.y" + { ((*yyvalp).ttype) = error_mark_node; ;} + break; + + case 260: +-#line 1020 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 1022 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 261: +-#line 1022 "parse.y" +- { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1024 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 262: +-#line 1024 "parse.y" +- { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 1026 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 263: +-#line 1026 "parse.y" ++#line 1028 "parse.y" + { error ("extra comma"); ;} + break; + + case 265: +-#line 1032 "parse.y" +- { ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1034 "parse.y" ++ { ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 266: +-#line 1034 "parse.y" ++#line 1036 "parse.y" + { +- defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype); ++ defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype); + chk_dialect ("packed subrange types are", B_D_PASCAL); +- ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); ++ ((*yyvalp).ttype) = build_pascal_subrange_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype)); + ;} + break; + + case 267: +-#line 1043 "parse.y" +- { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1045 "parse.y" ++ { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 268: +-#line 1045 "parse.y" +- { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1047 "parse.y" ++ { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 269: +-#line 1047 "parse.y" +- { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1049 "parse.y" ++ { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 270: +-#line 1049 "parse.y" +- { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type (p_build_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1, TYPE_VOLATILE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); ;} ++#line 1051 "parse.y" ++ { ((*yyvalp).ttype) = EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)) ? error_mark_node : build_pascal_pointer_type (p_build_type_variant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1, TYPE_VOLATILE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)))); ;} + break; + + case 271: +-#line 1054 "parse.y" +- { ((*yyvalp).ttype) = get_pointer_domain_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1056 "parse.y" ++ { ((*yyvalp).ttype) = get_pointer_domain_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 272: +-#line 1056 "parse.y" ++#line 1058 "parse.y" + { + chk_dialect ("pointers to routines are", GNU_PASCAL); +- gcc_assert (EM ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) || (TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE && TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); +- ((*yyvalp).ttype) = TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ++ gcc_assert (EM ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)) || (TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)) == REFERENCE_TYPE && TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)))); ++ ((*yyvalp).ttype) = TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); + ;} + break; + + case 274: +-#line 1066 "parse.y" ++#line 1068 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_procedural_type (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_procedural_type (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); + ;} + break; + + case 275: +-#line 1071 "parse.y" +- { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 1073 "parse.y" ++ { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 276: +-#line 1073 "parse.y" +- { ((*yyvalp).ttype) = build_procedural_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1075 "parse.y" ++ { ((*yyvalp).ttype) = build_procedural_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 278: +-#line 1079 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} ++#line 1081 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 279: +-#line 1081 "parse.y" ++#line 1083 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 282: +-#line 1090 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 1092 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 283: +-#line 1091 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1093 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 284: +-#line 1093 "parse.y" ++#line 1095 "parse.y" + { ((*yyvalp).ttype) = error_mark_node; ;} + break; + + case 286: +-#line 1099 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), build_tree_list (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1101 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), build_tree_list (void_type_node, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 287: +-#line 1101 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1103 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 288: +-#line 1106 "parse.y" +- { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1108 "parse.y" ++ { ((*yyvalp).ttype) = build_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 289: +-#line 1108 "parse.y" ++#line 1110 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, + void_type_node, 0); + ;} + break; + + case 290: +-#line 1114 "parse.y" +- { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1116 "parse.y" ++ { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 291: +-#line 1116 "parse.y" +- { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1118 "parse.y" ++ { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 292: +-#line 1118 "parse.y" ++#line 1120 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, + boolean_type_node, 1); + ;} + break; + + case 293: +-#line 1124 "parse.y" ++#line 1126 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, + void_type_node, 1); + ;} + break; + + case 294: +-#line 1130 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1132 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 295: +-#line 1132 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1134 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 296: +-#line 1134 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1136 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 297: +-#line 1136 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1138 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 298: +-#line 1138 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1140 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 301: +-#line 1145 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1147 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 302: +-#line 1147 "parse.y" ++#line 1149 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 303: +-#line 1151 "parse.y" ++#line 1153 "parse.y" + { lex_const_equal = -1; ;} + break; + + case 304: +-#line 1153 "parse.y" ++#line 1155 "parse.y" + { chk_dialect ("initialization with `:=' is", VAX_PASCAL|SUN_PASCAL); ;} + break; + + case 305: +-#line 1155 "parse.y" ++#line 1157 "parse.y" + { chk_dialect ("initialization with `=' is", BORLAND_DELPHI); ;} + break; + + case 306: +-#line 1162 "parse.y" +- { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} ++#line 1164 "parse.y" ++ { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} + break; + + case 307: +-#line 1173 "parse.y" +- { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1175 "parse.y" ++ { declare_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 308: +-#line 1175 "parse.y" +- { ((*yyvalp).ttype) = start_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1177 "parse.y" ++ { ((*yyvalp).ttype) = start_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 309: +-#line 1177 "parse.y" ++#line 1179 "parse.y" + { + do_setjmp (); + un_initialize_block (getdecls (), 0, 0); +@@ -6273,455 +6069,455 @@ + break; + + case 310: +-#line 1182 "parse.y" +- { finish_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1184 "parse.y" ++ { finish_routine ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (9))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 313: +-#line 1192 "parse.y" ++#line 1194 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, + void_type_node, 0); + ;} + break; + + case 314: +-#line 1198 "parse.y" +- { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1200 "parse.y" ++ { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 315: +-#line 1200 "parse.y" +- { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1202 "parse.y" ++ { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 316: +-#line 1202 "parse.y" +- { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1204 "parse.y" ++ { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 317: +-#line 1204 "parse.y" +- { ((*yyvalp).ttype) = build_operator_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1206 "parse.y" ++ { ((*yyvalp).ttype) = build_operator_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 318: +-#line 1214 "parse.y" ++#line 1216 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, + void_type_node, 0); + ;} + break; + + case 319: +-#line 1220 "parse.y" +- { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1222 "parse.y" ++ { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 320: +-#line 1222 "parse.y" +- { ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1224 "parse.y" ++ { ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (8))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((8) - (8))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 321: +-#line 1224 "parse.y" ++#line 1226 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, + boolean_type_node, 1); + ;} + break; + + case 322: +-#line 1230 "parse.y" ++#line 1232 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, + void_type_node, 1); + ;} + break; + + case 325: +-#line 1244 "parse.y" +- { ((*yyvalp).ttype) = chainon (chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1246 "parse.y" ++ { ((*yyvalp).ttype) = chainon (chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 326: +-#line 1249 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1251 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 327: +-#line 1251 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1253 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 328: +-#line 1253 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_name); ;} ++#line 1255 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yyloc), p_name); ;} + break; + + case 329: +-#line 1255 "parse.y" +- { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1257 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 330: +-#line 1257 "parse.y" +- { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1259 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 331: +-#line 1259 "parse.y" +- { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1261 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 332: +-#line 1261 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1263 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 333: +-#line 1263 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1265 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 334: +-#line 1265 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1267 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 336: +-#line 1271 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1273 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 337: +-#line 1273 "parse.y" +- { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1275 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 338: +-#line 1278 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1280 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 340: +-#line 1284 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1286 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 342: +-#line 1290 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 1292 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 343: +-#line 1292 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 1294 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 344: +-#line 1294 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1296 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 345: +-#line 1296 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1298 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 346: +-#line 1298 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1300 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (6))].yystate.yysemantics.yysval.ttype), tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 352: +-#line 1314 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); chk_dialect ("operator result variables with `=' are", GNU_PASCAL); ;} ++#line 1316 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); chk_dialect ("operator result variables with `=' are", GNU_PASCAL); ;} + break; + + case 353: +-#line 1316 "parse.y" ++#line 1318 "parse.y" + { error ("missing operator result variable"); ;} + break; + + case 354: +-#line 1320 "parse.y" ++#line 1322 "parse.y" + { push_scope (); ;} + break; + + case 355: +-#line 1320 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 1322 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 357: +-#line 1325 "parse.y" ++#line 1327 "parse.y" + { chk_dialect ("empty parentheses are", BORLAND_DELPHI); ((*yyvalp).ttype) = void_list_node; ;} + break; + + case 358: +-#line 1327 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); ;} ++#line 1329 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 359: +-#line 1329 "parse.y" ++#line 1331 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE); ;} + break; + + case 360: +-#line 1331 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, NULL_TREE)); ;} ++#line 1333 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, NULL_TREE)); ;} + break; + + case 361: +-#line 1333 "parse.y" ++#line 1335 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 363: +-#line 1339 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1341 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 364: +-#line 1341 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} ++#line 1343 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing semicolon"); yyerrok; ;} + break; + + case 366: +-#line 1347 "parse.y" +- { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0, 0); ;} ++#line 1349 "parse.y" ++ { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0, 0); ;} + break; + + case 367: +-#line 1349 "parse.y" +- { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0, 1); ;} ++#line 1351 "parse.y" ++ { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), 0, 1); ;} + break; + + case 368: +-#line 1351 "parse.y" +- { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1, !!(((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1353 "parse.y" ++ { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), 1, !!(((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 369: +-#line 1353 "parse.y" +- { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 3, 1); ;} ++#line 1355 "parse.y" ++ { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), 3, 1); ;} + break; + + case 370: +-#line 1355 "parse.y" +- { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 2, 1); ;} ++#line 1357 "parse.y" ++ { ((*yyvalp).ttype) = build_formal_param ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 2, 1); ;} + break; + + case 371: +-#line 1357 "parse.y" ++#line 1359 "parse.y" + { +- pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); +- ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE, ++ pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ++ ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE, + void_type_node, 0); + ;} + break; + + case 372: +-#line 1363 "parse.y" +- { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1365 "parse.y" ++ { pop_param_level ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 373: +-#line 1365 "parse.y" +- { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1367 "parse.y" ++ { ((*yyvalp).ttype) = build_routine_heading (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 374: +-#line 1370 "parse.y" ++#line 1372 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 375: +-#line 1372 "parse.y" +- { ((*yyvalp).ttype) = check_result_type ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1374 "parse.y" ++ { ((*yyvalp).ttype) = check_result_type ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 378: +-#line 1379 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); chk_dialect ("function result variable specifications are", E_O_PASCAL); ;} ++#line 1381 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); chk_dialect ("function result variable specifications are", E_O_PASCAL); ;} + break; + + case 380: +-#line 1385 "parse.y" ++#line 1387 "parse.y" + { chk_dialect ("function result variables without `=' are", GNU_PASCAL); ;} + break; + + case 383: +-#line 1395 "parse.y" ++#line 1397 "parse.y" + { ((*yyvalp).ttype) = void_type_node; chk_dialect ("untyped parameters are", U_B_D_M_PASCAL); ;} + break; + + case 384: +-#line 1397 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 1399 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 388: +-#line 1408 "parse.y" +- { ((*yyvalp).ttype) = build_type_of ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1410 "parse.y" ++ { ((*yyvalp).ttype) = build_type_of ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 391: +-#line 1418 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1420 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 392: +-#line 1420 "parse.y" ++#line 1422 "parse.y" + { +- defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.itype); +- PASCAL_TREE_PACKED ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype)) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.itype); +- ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ++ defining_packed_type -= (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.itype); ++ PASCAL_TREE_PACKED ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (7))].yystate.yysemantics.yysval.ttype)) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (7))].yystate.yysemantics.yysval.itype); ++ ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype)); + ;} + break; + + case 394: +-#line 1430 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1432 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 395: +-#line 1432 "parse.y" ++#line 1434 "parse.y" + { error ("missing semicolon"); yyerrok; ;} + break; + + case 397: +-#line 1438 "parse.y" +- { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 1440 "parse.y" ++ { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype)))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 398: +-#line 1443 "parse.y" +- { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype); ;} ++#line 1445 "parse.y" ++ { TREE_TYPE ((((*yyvalp).ttype) = build_tree_list (NULL_TREE, NULL_TREE))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 401: +-#line 1455 "parse.y" ++#line 1457 "parse.y" + { yyerrok; ;} + break; + + case 403: +-#line 1461 "parse.y" ++#line 1463 "parse.y" + { yyerrok; ;} + break; + + case 406: +-#line 1468 "parse.y" ++#line 1470 "parse.y" + { chk_dialect ("variable declarations in the statement part are", GNU_PASCAL); pushlevel_expand (1); ;} + break; + + case 407: +-#line 1470 "parse.y" +- { un_initialize_block ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0, 0); ;} ++#line 1472 "parse.y" ++ { un_initialize_block ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0, 0); ;} + break; + + case 409: +-#line 1476 "parse.y" ++#line 1478 "parse.y" + { ((*yyvalp).itype) = 0; ;} + break; + + case 410: +-#line 1478 "parse.y" ++#line 1480 "parse.y" + { ((*yyvalp).itype) = 1; ;} + break; + + case 412: +-#line 1486 "parse.y" ++#line 1488 "parse.y" + { mark_temporary_levels (); ;} + break; + + case 413: +-#line 1488 "parse.y" ++#line 1490 "parse.y" + { release_temporary_levels (); ;} + break; + + case 418: +-#line 1503 "parse.y" +- { expand_call_statement ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1505 "parse.y" ++ { expand_call_statement ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 419: +-#line 1505 "parse.y" +- { ((*yyvalp).itype) = allow_function_calls (!PASCAL_PROCEDURAL_TYPE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); ;} ++#line 1507 "parse.y" ++ { ((*yyvalp).itype) = allow_function_calls (!PASCAL_PROCEDURAL_TYPE (TREE_TYPE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)))); ;} + break; + + case 420: +-#line 1507 "parse.y" +- { expand_pascal_assignment ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.itype)); ;} ++#line 1509 "parse.y" ++ { expand_pascal_assignment ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 421: +-#line 1509 "parse.y" ++#line 1511 "parse.y" + { build_predef_call (p_Return, NULL_TREE); ;} + break; + + case 422: +-#line 1511 "parse.y" +- { build_predef_call (p_Return, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1513 "parse.y" ++ { build_predef_call (p_Return, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 423: +-#line 1513 "parse.y" ++#line 1515 "parse.y" + { build_predef_call (p_Exit, NULL_TREE); ;} + break; + + case 424: +-#line 1515 "parse.y" ++#line 1517 "parse.y" + { build_predef_call (p_Exit, build_tree_list (NULL_TREE, void_type_node)); ;} + break; + + case 425: +-#line 1517 "parse.y" +- { build_predef_call (p_Exit, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1519 "parse.y" ++ { build_predef_call (p_Exit, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 426: +-#line 1519 "parse.y" +- { build_predef_call (p_Exit, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1521 "parse.y" ++ { build_predef_call (p_Exit, build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 428: +-#line 1522 "parse.y" +- { restore_identifiers ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1524 "parse.y" ++ { restore_identifiers ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 429: +-#line 1524 "parse.y" ++#line 1526 "parse.y" + { expand_end_cond (); ;} + break; + + case 430: +-#line 1526 "parse.y" ++#line 1528 "parse.y" + { expand_start_else (); ;} + break; + + case 431: +-#line 1528 "parse.y" ++#line 1530 "parse.y" + { +- if (!(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype) && extra_warnings) +- warning ("empty statement after `else'"); ++ if (!(((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.itype) && extra_warnings) ++ gpc_warning ("empty statement after `else'"); + expand_end_cond (); + ;} + break; + + case 432: +-#line 1534 "parse.y" +- { ((*yyvalp).ttype) = pascal_expand_start_case ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1536 "parse.y" ++ { ((*yyvalp).ttype) = pascal_expand_start_case ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 433: +-#line 1536 "parse.y" ++#line 1538 "parse.y" + { + if (!EM (current_case_values)) + { +@@ -6733,128 +6529,128 @@ + break; + + case 434: +-#line 1545 "parse.y" ++#line 1547 "parse.y" + { +- if (!(((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype) && !(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype)) ++ if (!(((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (8))].yystate.yysemantics.yysval.itype) && !(((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (8))].yystate.yysemantics.yysval.itype)) + chk_dialect ("empty `case' statements are", MAC_PASCAL); + expand_exit_something (); + if (!EM (current_case_values)) +- expand_end_case ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.ttype)); +- current_case_values = (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype); ++ expand_end_case ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (8))].yystate.yysemantics.yysval.ttype)); ++ current_case_values = (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (8))].yystate.yysemantics.yysval.ttype); + yyerrok; + ;} + break; + + case 435: +-#line 1555 "parse.y" ++#line 1557 "parse.y" + { emit_nop (); expand_start_loop_continue_elsewhere (1); ;} + break; + + case 436: +-#line 1557 "parse.y" +- { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc)); expand_loop_continue_here (); ;} ++#line 1559 "parse.y" ++ { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yyloc)); expand_loop_continue_here (); ;} + break; + + case 437: +-#line 1559 "parse.y" +- { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc)); expand_exit_loop_if_false (0, build_pascal_unary_op (TRUTH_NOT_EXPR, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)))); ;} ++#line 1561 "parse.y" ++ { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yyloc)); expand_exit_loop_if_false (0, build_pascal_unary_op (TRUTH_NOT_EXPR, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (7))].yystate.yysemantics.yysval.ttype)))); ;} + break; + + case 438: +-#line 1561 "parse.y" ++#line 1563 "parse.y" + { expand_end_loop (); ;} + break; + + case 439: +-#line 1563 "parse.y" ++#line 1565 "parse.y" + { expand_start_loop (1); ;} + break; + + case 440: +-#line 1565 "parse.y" +- { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc)); expand_exit_loop_if_false (0, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1567 "parse.y" ++ { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yyloc)); expand_exit_loop_if_false (0, check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 441: +-#line 1567 "parse.y" ++#line 1569 "parse.y" + { expand_end_loop (); ;} + break; + + case 442: +-#line 1569 "parse.y" +- { ((*yyvalp).ttype) = start_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code)); ;} ++#line 1571 "parse.y" ++ { ((*yyvalp).ttype) = start_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.code)); ;} + break; + + case 443: +-#line 1571 "parse.y" +- { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yyloc)); finish_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.code)); ;} ++#line 1573 "parse.y" ++ { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (11))].yystate.yyloc)); finish_for_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((7) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (11))].yystate.yysemantics.yysval.code)); ;} + break; + + case 444: +-#line 1573 "parse.y" +- { ((*yyvalp).ttype) = start_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1575 "parse.y" ++ { ((*yyvalp).ttype) = start_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 445: +-#line 1575 "parse.y" +- { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yyloc)); finish_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1577 "parse.y" ++ { LOCATION_NOTE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (9))].yystate.yyloc)); finish_for_set_loop ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (9))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (9))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 446: +-#line 1577 "parse.y" +- { pascal_expand_goto ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1579 "parse.y" ++ { pascal_expand_goto ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 447: +-#line 1582 "parse.y" +- { set_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1584 "parse.y" ++ { set_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 449: +-#line 1588 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1590 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 450: +-#line 1590 "parse.y" ++#line 1592 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 451: +-#line 1592 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 1594 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 452: +-#line 1594 "parse.y" ++#line 1596 "parse.y" + { error ("extra comma"); ;} + break; + + case 453: +-#line 1599 "parse.y" +- { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 1601 "parse.y" ++ { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 454: +-#line 1601 "parse.y" +- { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1603 "parse.y" ++ { ((*yyvalp).ttype) = pascal_shadow_record_fields ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 455: +-#line 1606 "parse.y" +- { expand_start_cond (check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)), 0); ;} ++#line 1608 "parse.y" ++ { expand_start_cond (check_boolean ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)), 0); ;} + break; + + case 456: +-#line 1608 "parse.y" ++#line 1610 "parse.y" + { +- if (!(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype) && extra_warnings) +- warning ("empty statement after `then'"); ++ if (!(((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.itype) && extra_warnings) ++ gpc_warning ("empty statement after `then'"); + ;} + break; + + case 457: +-#line 1616 "parse.y" ++#line 1618 "parse.y" + { + /* Create an implicit `otherwise' (in the rule above) to avoid warnings + about unhandled cases. In ISO Pascal, this is a run-time error. */ +@@ -6865,199 +6661,199 @@ + break; + + case 458: +-#line 1624 "parse.y" ++#line 1626 "parse.y" + { ((*yyvalp).itype) = 1; ;} + break; + + case 459: +-#line 1629 "parse.y" ++#line 1631 "parse.y" + { chk_dialect ("`else' in `case' statements is", B_D_M_PASCAL); ;} + break; + + case 461: +-#line 1635 "parse.y" ++#line 1637 "parse.y" + { ((*yyvalp).itype) = 0; ;} + break; + + case 462: +-#line 1637 "parse.y" ++#line 1639 "parse.y" + { ((*yyvalp).itype) = 1; ;} + break; + + case 464: +-#line 1643 "parse.y" ++#line 1645 "parse.y" + { yyerrok; ;} + break; + + case 465: +-#line 1645 "parse.y" ++#line 1647 "parse.y" + { error ("case element expected"); ;} + break; + + case 466: +-#line 1647 "parse.y" ++#line 1649 "parse.y" + { error ("missing semicolon"); yyerrok; ;} + break; + + case 467: +-#line 1649 "parse.y" ++#line 1651 "parse.y" + { error ("extra semicolon"); ;} + break; + + case 468: +-#line 1654 "parse.y" +- { pascal_pushcase ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1656 "parse.y" ++ { pascal_pushcase ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 469: +-#line 1656 "parse.y" ++#line 1658 "parse.y" + { expand_exit_something (); ;} + break; + + case 471: +-#line 1662 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1664 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 472: +-#line 1664 "parse.y" ++#line 1666 "parse.y" + { error ("extra comma"); ;} + break; + + case 473: +-#line 1666 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 1668 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 475: +-#line 1672 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1674 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 476: +-#line 1674 "parse.y" +- { chk_dialect ("`case' ranges are", NOT_CLASSIC_PASCAL); ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1676 "parse.y" ++ { chk_dialect ("`case' ranges are", NOT_CLASSIC_PASCAL); ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 477: +-#line 1676 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); error ("missing `..'"); yyerrok; ;} ++#line 1678 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing `..'"); yyerrok; ;} + break; + + case 478: +-#line 1678 "parse.y" +- { error ("extra `..'"); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 0)); ;} ++#line 1680 "parse.y" ++ { error ("extra `..'"); ((*yyvalp).ttype) = build_tree_list (NULL_TREE, string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 0)); ;} + break; + + case 479: +-#line 1683 "parse.y" ++#line 1685 "parse.y" + { ((*yyvalp).code) = LE_EXPR; ;} + break; + + case 480: +-#line 1685 "parse.y" ++#line 1687 "parse.y" + { ((*yyvalp).code) = GE_EXPR; ;} + break; + + case 481: +-#line 1687 "parse.y" ++#line 1689 "parse.y" + { error ("missing `to' or `downto'"); ((*yyvalp).code) = LE_EXPR; ;} + break; + + case 483: +-#line 1693 "parse.y" +- { ((*yyvalp).ttype) = build_pascal_lvalue_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1695 "parse.y" ++ { ((*yyvalp).ttype) = build_pascal_lvalue_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 485: +-#line 1699 "parse.y" ++#line 1701 "parse.y" + { error ("using `=' instead of `:=' in assignment"); ;} + break; + + case 486: +-#line 1704 "parse.y" +- { build_predef_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1706 "parse.y" ++ { build_predef_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.itype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 487: +-#line 1706 "parse.y" +- { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))->symbol, NULL_TREE); ;} ++#line 1708 "parse.y" ++ { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))->symbol, NULL_TREE); ;} + break; + + case 488: +-#line 1708 "parse.y" +- { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1710 "parse.y" ++ { build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 489: +-#line 1710 "parse.y" +- { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} ++#line 1712 "parse.y" ++ { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} + break; + + case 490: +-#line 1712 "parse.y" +- { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1714 "parse.y" ++ { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 491: +-#line 1714 "parse.y" +- { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1716 "parse.y" ++ { build_new_dispose (p_Dispose, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 492: +-#line 1716 "parse.y" +- { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); ;} ++#line 1718 "parse.y" ++ { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 493: +-#line 1718 "parse.y" +- { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.itype)); ;} ++#line 1720 "parse.y" ++ { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (7))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 494: +-#line 1720 "parse.y" +- { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.itype)); ;} ++#line 1722 "parse.y" ++ { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (9))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (9))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((8) - (9))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (9))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 495: +-#line 1722 "parse.y" +- { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-9)].yystate.yysemantics.yysval.itype)); ;} ++#line 1724 "parse.y" ++ { pascal_expand_asm_operands ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((8) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((10) - (11))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (11))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 496: +-#line 1727 "parse.y" ++#line 1729 "parse.y" + { ((*yyvalp).itype) = 0; ;} + break; + + case 497: +-#line 1729 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_volatile); ((*yyvalp).itype) = 1; ;} ++#line 1731 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_volatile); ((*yyvalp).itype) = 1; ;} + break; + + case 501: +-#line 1740 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1742 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 502: +-#line 1745 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1747 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 503: +-#line 1750 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1752 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 504: +-#line 1752 "parse.y" +- { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1754 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 505: +-#line 1759 "parse.y" ++#line 1761 "parse.y" + { +- ((*yyvalp).ttype) = string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ++ ((*yyvalp).ttype) = string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 0); + if (PEDANTIC (NOT_CLASSIC_PASCAL) + && ( PASCAL_CST_PARENTHESES (((*yyvalp).ttype)) + || !(TREE_CODE (((*yyvalp).ttype)) == STRING_CST +@@ -7068,127 +6864,127 @@ + break; + + case 506: +-#line 1772 "parse.y" +- { ((*yyvalp).ttype) = fold ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1774 "parse.y" ++ { ((*yyvalp).ttype) = fold ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 507: +-#line 1774 "parse.y" +- { ((*yyvalp).ttype) = fold (parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1776 "parse.y" ++ { ((*yyvalp).ttype) = fold (parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 509: +-#line 1780 "parse.y" +- { ((*yyvalp).ttype) = build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1782 "parse.y" ++ { ((*yyvalp).ttype) = build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 510: +-#line 1782 "parse.y" +- { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1784 "parse.y" ++ { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 511: +-#line 1784 "parse.y" +- { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} ++#line 1786 "parse.y" ++ { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} + break; + + case 512: +-#line 1786 "parse.y" +- { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1788 "parse.y" ++ { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 513: +-#line 1788 "parse.y" +- { if ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1790 "parse.y" ++ { if ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 515: +-#line 1794 "parse.y" +- { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1796 "parse.y" ++ { ((*yyvalp).ttype) = parser_build_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 516: +-#line 1796 "parse.y" +- { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} ++#line 1798 "parse.y" ++ { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1); ;} + break; + + case 517: +-#line 1798 "parse.y" +- { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1800 "parse.y" ++ { ((*yyvalp).ttype) = start_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 518: +-#line 1800 "parse.y" +- { if ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1802 "parse.y" ++ { if ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)) LOCATION_NOTE (COPYLOC ((*yylocp), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yyloc))); ((*yyvalp).ttype) = finish_boolean_binary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 520: +-#line 1806 "parse.y" +- { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 0); ;} ++#line 1808 "parse.y" ++ { ((*yyvalp).ttype) = build_operator_call ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 0); ;} + break; + + case 521: +-#line 1808 "parse.y" +- { ((*yyvalp).ttype) = parser_build_binary_op (POW_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1810 "parse.y" ++ { ((*yyvalp).ttype) = parser_build_binary_op (POW_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 522: +-#line 1810 "parse.y" +- { ((*yyvalp).ttype) = parser_build_binary_op (POWER_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1812 "parse.y" ++ { ((*yyvalp).ttype) = parser_build_binary_op (POWER_EXPR, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 523: +-#line 1812 "parse.y" +- { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), p_is); ;} ++#line 1814 "parse.y" ++ { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), p_is); ;} + break; + + case 524: +-#line 1814 "parse.y" +- { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), p_as); ;} ++#line 1816 "parse.y" ++ { ((*yyvalp).ttype) = build_is_as ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), p_as); ;} + break; + + case 525: +-#line 1819 "parse.y" +- { ((*yyvalp).ttype) = set_exp_original_code (build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.code)); ;} ++#line 1821 "parse.y" ++ { ((*yyvalp).ttype) = set_exp_original_code (build_pascal_unary_op ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.code), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.code)); ;} + break; + + case 526: +-#line 1821 "parse.y" +- { chk_dialect ("the address operator is", B_D_M_PASCAL); ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), !co->typed_address); ;} ++#line 1823 "parse.y" ++ { chk_dialect ("the address operator is", B_D_M_PASCAL); ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype), !co->typed_address); ;} + break; + + case 529: +-#line 1825 "parse.y" ++#line 1827 "parse.y" + { ((*yyvalp).ttype) = null_pointer_node; ;} + break; + + case 531: +-#line 1828 "parse.y" +- { ((*yyvalp).ttype) = build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1830 "parse.y" ++ { ((*yyvalp).ttype) = build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 537: +-#line 1844 "parse.y" +- { ((*yyvalp).ttype) = combine_strings ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1); ;} ++#line 1846 "parse.y" ++ { ((*yyvalp).ttype) = combine_strings ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 1); ;} + break; + + case 538: +-#line 1849 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1851 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 539: +-#line 1851 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1853 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 542: +-#line 1858 "parse.y" +- { ((*yyvalp).ttype) = build_caret_string_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype)); ;} ++#line 1860 "parse.y" ++ { ((*yyvalp).ttype) = build_caret_string_constant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 561: +-#line 1869 "parse.y" ++#line 1871 "parse.y" + { + if (PASCAL_TYPE_UNDISCRIMINATED_STRING (((*yyvalp).ttype))) + { +@@ -7200,808 +6996,810 @@ + break; + + case 562: +-#line 1881 "parse.y" ++#line 1883 "parse.y" + { +- tree decl = lookup_name ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ++ tree decl = lookup_name ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); + ((*yyvalp).ttype) = error_mark_node; + if (!decl) +- error ("unknown identifier `%s'", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ++ error ("unknown identifier `%s'", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))); + else if (TREE_CODE (decl) != TYPE_DECL) +- error ("type name expected, `%s' given", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); ++ error ("type name expected, `%s' given", IDENTIFIER_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))); + else + ((*yyvalp).ttype) = TREE_TYPE (decl); + ;} + break; + + case 564: +-#line 1896 "parse.y" +- { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1898 "parse.y" ++ { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 565: +-#line 1901 "parse.y" +- { ((*yyvalp).ttype) = build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1903 "parse.y" ++ { ((*yyvalp).ttype) = build_predef_call (IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype))->symbol, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 568: +-#line 1908 "parse.y" +- { ((*yyvalp).ttype) = TYPE_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1910 "parse.y" ++ { ((*yyvalp).ttype) = TYPE_NAME ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 569: +-#line 1910 "parse.y" +- { ((*yyvalp).ttype) = set_exp_original_code ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NOP_EXPR); ;} ++#line 1912 "parse.y" ++ { ((*yyvalp).ttype) = set_exp_original_code ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype), NOP_EXPR); ;} + break; + + case 570: +-#line 1912 "parse.y" +- { ((*yyvalp).ttype) = build_qualified_or_component_access ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1914 "parse.y" ++ { ((*yyvalp).ttype) = build_qualified_or_component_access ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 571: +-#line 1914 "parse.y" +- { ((*yyvalp).ttype) = build_pascal_pointer_reference ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1916 "parse.y" ++ { ((*yyvalp).ttype) = build_pascal_pointer_reference ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 572: +-#line 1916 "parse.y" +- { ((*yyvalp).ttype) = build_array_ref_or_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1918 "parse.y" ++ { ((*yyvalp).ttype) = build_array_ref_or_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 573: +-#line 1918 "parse.y" +- { ((*yyvalp).ttype) = build_iso_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 1920 "parse.y" ++ { ((*yyvalp).ttype) = build_iso_constructor ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.ttype), nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 574: +-#line 1920 "parse.y" +- { chk_dialect ("empty parentheses are", BORLAND_DELPHI | MAC_PASCAL); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 1922 "parse.y" ++ { chk_dialect ("empty parentheses are", BORLAND_DELPHI | MAC_PASCAL); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 575: +-#line 1922 "parse.y" +- { allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.itype)); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1924 "parse.y" ++ { allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.itype)); ((*yyvalp).ttype) = build_call_or_cast ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 576: +-#line 1924 "parse.y" +- { ((*yyvalp).ttype) = build_inherited_method ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1926 "parse.y" ++ { ((*yyvalp).ttype) = build_inherited_method ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (2))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 577: +-#line 1926 "parse.y" +- { ((*yyvalp).ttype) = build_predef_call (p_FormatString, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1928 "parse.y" ++ { ((*yyvalp).ttype) = build_predef_call (p_FormatString, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 578: +-#line 1928 "parse.y" +- { ((*yyvalp).ttype) = build_predef_call (p_StringOf, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1930 "parse.y" ++ { ((*yyvalp).ttype) = build_predef_call (p_StringOf, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 579: +-#line 1930 "parse.y" +- { ((*yyvalp).ttype) = build_predef_call (p_Assigned, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); ;} ++#line 1932 "parse.y" ++ { ((*yyvalp).ttype) = build_predef_call (p_Assigned, build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (5))].yystate.yysemantics.yysval.ttype))); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (5))].yystate.yysemantics.yysval.itype)); ;} + break; + + case 580: +-#line 1932 "parse.y" +- { ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), co->pascal_dialect & B_D_M_PASCAL); ;} ++#line 1934 "parse.y" ++ { ((*yyvalp).ttype) = build_pascal_address_expression ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), co->pascal_dialect & B_D_M_PASCAL); ;} + break; + + case 581: +-#line 1934 "parse.y" +- { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} ++#line 1936 "parse.y" ++ { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype), NULL_TREE, NULL_TREE); ;} + break; + + case 582: +-#line 1936 "parse.y" +- { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1938 "parse.y" ++ { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (6))].yystate.yysemantics.yysval.ttype), NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (6))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 583: +-#line 1938 "parse.y" +- { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1940 "parse.y" ++ { ((*yyvalp).ttype) = build_new_dispose (p_New, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (7))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (7))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 585: +-#line 1944 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); yyerrok; ;} ++#line 1946 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype); allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype)); yyerrok; ;} + break; + + case 586: +-#line 1946 "parse.y" ++#line 1948 "parse.y" + { +- ((*yyvalp).ttype) = build_tree_list (NULL_TREE, TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)) == TYPE_DECL ? (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype) : build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); +- allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.itype)); ++ ((*yyvalp).ttype) = build_tree_list (NULL_TREE, TREE_CODE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype)) == TYPE_DECL ? (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype) : build_variable_or_routine_access ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (4))].yystate.yysemantics.yysval.ttype))); ++ allow_function_calls ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (4))].yystate.yysemantics.yysval.itype)); + yyerrok; + ;} + break; + + case 587: +-#line 1954 "parse.y" ++#line 1956 "parse.y" + { ((*yyvalp).itype) = allow_function_calls (0); ;} + break; + + case 588: +-#line 1959 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1961 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 589: +-#line 1961 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))); yyerrok; ;} ++#line 1963 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))); yyerrok; ;} + break; + + case 590: +-#line 1963 "parse.y" ++#line 1965 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, error_mark_node); ;} + break; + + case 591: +-#line 1965 "parse.y" ++#line 1967 "parse.y" + { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, error_mark_node); error ("extra comma"); ;} + break; + + case 593: +-#line 1971 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 1973 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 594: +-#line 1973 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 1975 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 595: +-#line 1975 "parse.y" ++#line 1977 "parse.y" + { error ("extra comma"); ;} + break; + + case 596: +-#line 1981 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1983 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 597: +-#line 1983 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1985 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 598: +-#line 1985 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1987 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((5) - (5))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (5))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (5))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 599: +-#line 1990 "parse.y" ++#line 1992 "parse.y" + { chk_dialect ("untyped files are", U_B_D_M_PASCAL); ((*yyvalp).ttype) = untyped_file_type_node; ;} + break; + + case 601: +-#line 1996 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 1998 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 602: +-#line 1998 "parse.y" +- { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} ++#line 2000 "parse.y" ++ { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 606: +-#line 2006 "parse.y" +- { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} ++#line 2008 "parse.y" ++ { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 607: +-#line 2011 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2013 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 608: +-#line 2013 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2015 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 609: +-#line 2018 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} ++#line 2020 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((6) - (6))].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (6))].yystate.yysemantics.yysval.ttype)), (((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (6))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 610: +-#line 2020 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, integer_zero_node), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype))); ;} ++#line 2022 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((4) - (4))].yystate.yysemantics.yysval.ttype), build_tree_list (build_tree_list (NULL_TREE, integer_zero_node), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 611: +-#line 2025 "parse.y" +- { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} ++#line 2027 "parse.y" ++ { ((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (4))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 612: +-#line 2030 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, NULL_TREE), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2032 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (build_tree_list (NULL_TREE, NULL_TREE), (((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 613: +-#line 2035 "parse.y" +- { ((*yyvalp).ttype) = maybe_schema_discriminant ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2037 "parse.y" ++ { ((*yyvalp).ttype) = maybe_schema_discriminant ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 614: +-#line 2037 "parse.y" ++#line 2039 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 615: +-#line 2039 "parse.y" +- { PASCAL_BP_INITIALIZER_LIST ((((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)))) = 1; ;} ++#line 2041 "parse.y" ++ { PASCAL_BP_INITIALIZER_LIST ((((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)))) = 1; ;} + break; + + case 616: +-#line 2041 "parse.y" +- { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2043 "parse.y" ++ { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 617: +-#line 2043 "parse.y" ++#line 2045 "parse.y" + { error ("invalid component value"); ((*yyvalp).ttype) = error_mark_node; ;} + break; + + case 619: +-#line 2049 "parse.y" +- { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); ;} ++#line 2051 "parse.y" ++ { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); ;} + break; + + case 620: +-#line 2051 "parse.y" +- { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); error ("missing separator"); ;} ++#line 2053 "parse.y" ++ { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); error ("missing separator"); ;} + break; + + case 622: +-#line 2057 "parse.y" ++#line 2059 "parse.y" + { chk_dialect ("initializers separated with `,' are", B_D_M_PASCAL); ;} + break; + + case 623: +-#line 2062 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2064 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 624: +-#line 2064 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2066 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 626: +-#line 2070 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); yyerrok; ;} ++#line 2072 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); yyerrok; ;} + break; + + case 627: +-#line 2072 "parse.y" ++#line 2074 "parse.y" + { error ("missing index expression"); ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 628: +-#line 2074 "parse.y" +- { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} ++#line 2076 "parse.y" ++ { ((*yyvalp).ttype) = chainon ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); error ("missing comma"); yyerrok; ;} + break; + + case 629: +-#line 2076 "parse.y" ++#line 2078 "parse.y" + { error ("extra comma"); ;} + break; + + case 630: +-#line 2081 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 2083 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 631: +-#line 2083 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1), NULL_TREE); ;} ++#line 2085 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), 1), NULL_TREE); ;} + break; + + case 632: +-#line 2085 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), 1), string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), 1)); ;} ++#line 2087 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), 1), string_may_be_char ((((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), 1)); ;} + break; + + case 633: +-#line 2090 "parse.y" ++#line 2092 "parse.y" + { ((*yyvalp).ttype) = build_set_constructor (NULL_TREE); ;} + break; + + case 634: +-#line 2092 "parse.y" +- { ((*yyvalp).ttype) = build_set_constructor (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.ttype))); ;} ++#line 2094 "parse.y" ++ { ((*yyvalp).ttype) = build_set_constructor (nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((2) - (3))].yystate.yysemantics.yysval.ttype))); ;} + break; + + case 636: +-#line 2098 "parse.y" +- { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); yyerrok; ;} ++#line 2100 "parse.y" ++ { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); yyerrok; ;} + break; + + case 637: +-#line 2100 "parse.y" +- { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype); error ("missing comma"); yyerrok; ;} ++#line 2102 "parse.y" ++ { TREE_CHAIN ((((*yyvalp).ttype) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype))) = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype); error ("missing comma"); yyerrok; ;} + break; + + case 638: +-#line 2102 "parse.y" ++#line 2104 "parse.y" + { error ("extra comma"); ;} + break; + + case 639: +-#line 2107 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} ++#line 2109 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), NULL_TREE); ;} + break; + + case 640: +-#line 2109 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2111 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 641: +-#line 2115 "parse.y" ++#line 2117 "parse.y" + { ((*yyvalp).code) = CONVERT_EXPR; ;} + break; + + case 642: +-#line 2116 "parse.y" ++#line 2118 "parse.y" + { ((*yyvalp).code) = NEGATE_EXPR; ;} + break; + + case 643: +-#line 2120 "parse.y" ++#line 2122 "parse.y" + { ((*yyvalp).code) = CONVERT_EXPR; ;} + break; + + case 644: +-#line 2121 "parse.y" ++#line 2123 "parse.y" + { ((*yyvalp).code) = NEGATE_EXPR; ;} + break; + + case 645: +-#line 2122 "parse.y" ++#line 2124 "parse.y" + { ((*yyvalp).code) = TRUTH_NOT_EXPR; ;} + break; + + case 646: +-#line 2126 "parse.y" ++#line 2128 "parse.y" + { ((*yyvalp).code) = NE_EXPR; ;} + break; + + case 647: +-#line 2127 "parse.y" ++#line 2129 "parse.y" + { ((*yyvalp).code) = LE_EXPR; ;} + break; + + case 648: +-#line 2128 "parse.y" ++#line 2130 "parse.y" + { ((*yyvalp).code) = GE_EXPR; ;} + break; + + case 649: +-#line 2129 "parse.y" ++#line 2131 "parse.y" + { ((*yyvalp).code) = EQ_EXPR; ;} + break; + + case 650: +-#line 2130 "parse.y" ++#line 2132 "parse.y" + { ((*yyvalp).code) = LT_EXPR; ;} + break; + + case 651: +-#line 2131 "parse.y" ++#line 2133 "parse.y" + { ((*yyvalp).code) = GT_EXPR; ;} + break; + + case 652: +-#line 2132 "parse.y" ++#line 2134 "parse.y" + { ((*yyvalp).code) = IN_EXPR; ;} + break; + + case 653: +-#line 2136 "parse.y" ++#line 2138 "parse.y" + { ((*yyvalp).code) = PLUS_EXPR; ;} + break; + + case 654: +-#line 2137 "parse.y" ++#line 2139 "parse.y" + { ((*yyvalp).code) = PLUS_EXPR; ;} + break; + + case 655: +-#line 2138 "parse.y" ++#line 2140 "parse.y" + { ((*yyvalp).code) = MINUS_EXPR; ;} + break; + + case 656: +-#line 2139 "parse.y" ++#line 2141 "parse.y" + { ((*yyvalp).code) = MINUS_EXPR; ;} + break; + + case 657: +-#line 2140 "parse.y" ++#line 2142 "parse.y" + { ((*yyvalp).code) = TRUTH_XOR_EXPR; ;} + break; + + case 658: +-#line 2141 "parse.y" ++#line 2143 "parse.y" + { ((*yyvalp).code) = SYMDIFF_EXPR; ;} + break; + + case 659: +-#line 2145 "parse.y" ++#line 2147 "parse.y" + { ((*yyvalp).code) = MULT_EXPR; ;} + break; + + case 660: +-#line 2146 "parse.y" ++#line 2148 "parse.y" + { ((*yyvalp).code) = RDIV_EXPR; ;} + break; + + case 661: +-#line 2147 "parse.y" ++#line 2149 "parse.y" + { ((*yyvalp).code) = TRUNC_DIV_EXPR; ;} + break; + + case 662: +-#line 2148 "parse.y" ++#line 2150 "parse.y" + { ((*yyvalp).code) = (co->pascal_dialect & B_D_M_PASCAL) ? TRUNC_MOD_EXPR : FLOOR_MOD_EXPR; ;} + break; + + case 663: +-#line 2149 "parse.y" ++#line 2151 "parse.y" + { ((*yyvalp).code) = LSHIFT_EXPR; ;} + break; + + case 664: +-#line 2150 "parse.y" ++#line 2152 "parse.y" + { ((*yyvalp).code) = RSHIFT_EXPR; ;} + break; + + case 665: +-#line 2154 "parse.y" ++#line 2156 "parse.y" + { ((*yyvalp).code) = TRUTH_OR_EXPR; ;} + break; + + case 666: +-#line 2155 "parse.y" ++#line 2157 "parse.y" + { ((*yyvalp).code) = TRUTH_ORIF_EXPR; chk_dialect ("`or else' (without underscore) is", GNU_PASCAL); ;} + break; + + case 667: +-#line 2156 "parse.y" ++#line 2158 "parse.y" + { ((*yyvalp).code) = TRUTH_ORIF_EXPR; ;} + break; + + case 668: +-#line 2157 "parse.y" ++#line 2159 "parse.y" + { ((*yyvalp).code) = TRUTH_ORIF_EXPR; chk_dialect ("`|' is", MAC_PASCAL); ;} + break; + + case 669: +-#line 2161 "parse.y" ++#line 2163 "parse.y" + { ((*yyvalp).code) = TRUTH_AND_EXPR; ;} + break; + + case 670: +-#line 2162 "parse.y" ++#line 2164 "parse.y" + { ((*yyvalp).code) = TRUTH_ANDIF_EXPR; chk_dialect ("`and then' (without underscore) is", GNU_PASCAL); ;} + break; + + case 671: +-#line 2163 "parse.y" ++#line 2165 "parse.y" + { ((*yyvalp).code) = TRUTH_ANDIF_EXPR; ;} + break; + + case 672: +-#line 2164 "parse.y" ++#line 2166 "parse.y" + { ((*yyvalp).code) = TRUTH_ANDIF_EXPR; chk_dialect ("`&' is", MAC_PASCAL); ;} + break; + + case 673: +-#line 2169 "parse.y" +- { ((*yyvalp).itype) = IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype))->symbol; ;} ++#line 2171 "parse.y" ++ { ((*yyvalp).itype) = IDENTIFIER_BUILT_IN_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype))->symbol; ;} + break; + + case 674: +-#line 2171 "parse.y" ++#line 2173 "parse.y" + { ((*yyvalp).itype) = p_and; ;} + break; + + case 675: +-#line 2172 "parse.y" ++#line 2174 "parse.y" + { ((*yyvalp).itype) = p_or; ;} + break; + + case 676: +-#line 2173 "parse.y" ++#line 2175 "parse.y" + { ((*yyvalp).itype) = p_not; ;} + break; + + case 677: +-#line 2174 "parse.y" ++#line 2176 "parse.y" + { ((*yyvalp).itype) = p_xor; ;} + break; + + case 678: +-#line 2175 "parse.y" ++#line 2177 "parse.y" + { ((*yyvalp).itype) = p_shl; ;} + break; + + case 679: +-#line 2176 "parse.y" ++#line 2178 "parse.y" + { ((*yyvalp).itype) = p_shr; ;} + break; + + case 680: +-#line 2182 "parse.y" ++#line 2184 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("BPlus", "+"); ;} + break; + + case 681: +-#line 2183 "parse.y" ++#line 2185 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("BPlus", "+"); ;} + break; + + case 682: +-#line 2184 "parse.y" ++#line 2186 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("BMinus", "-"); ;} + break; + + case 683: +-#line 2185 "parse.y" ++#line 2187 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("BMinus", "-"); ;} + break; + + case 684: +-#line 2186 "parse.y" ++#line 2188 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("BMult", "*"); ;} + break; + + case 685: +-#line 2187 "parse.y" ++#line 2189 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("RDiv", "/"); ;} + break; + + case 686: +-#line 2188 "parse.y" ++#line 2190 "parse.y" + { ((*yyvalp).ttype) = get_identifier ("Div"); ;} + break; + + case 687: +-#line 2189 "parse.y" ++#line 2191 "parse.y" + { ((*yyvalp).ttype) = get_identifier ("Mod"); ;} + break; + + case 688: +-#line 2190 "parse.y" ++#line 2192 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("RPower", "**"); ;} + break; + + case 689: +-#line 2191 "parse.y" ++#line 2193 "parse.y" + { ((*yyvalp).ttype) = get_identifier ("In"); ;} + break; + + case 690: +-#line 2192 "parse.y" ++#line 2194 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("LT", "<"); ;} + break; + + case 691: +-#line 2193 "parse.y" ++#line 2195 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("EQ", "="); ;} + break; + + case 692: +-#line 2194 "parse.y" ++#line 2196 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("GT", ">"); ;} + break; + + case 693: +-#line 2195 "parse.y" ++#line 2197 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("NE", "<>"); ;} + break; + + case 694: +-#line 2196 "parse.y" ++#line 2198 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("GE", ">="); ;} + break; + + case 695: +-#line 2197 "parse.y" ++#line 2199 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("LE", "<="); ;} + break; + + case 696: +-#line 2198 "parse.y" ++#line 2200 "parse.y" + { ((*yyvalp).ttype) = get_identifier ("And"); ;} + break; + + case 697: +-#line 2199 "parse.y" ++#line 2201 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("SAnd", "&"); ;} + break; + + case 698: +-#line 2200 "parse.y" ++#line 2202 "parse.y" + { ((*yyvalp).ttype) = get_identifier ("Or"); ;} + break; + + case 699: +-#line 2201 "parse.y" ++#line 2203 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("SOr", "|"); ;} + break; + + case 700: +-#line 2202 "parse.y" ++#line 2204 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("SymDiff", "<>"); ;} + break; + + case 703: +-#line 2208 "parse.y" ++#line 2210 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilPlus", "+>"); ;} + break; + + case 704: +-#line 2209 "parse.y" ++#line 2211 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilMinus", "->"); ;} + break; + + case 705: +-#line 2210 "parse.y" ++#line 2212 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorPlus", "+<"); ;} + break; + + case 706: +-#line 2211 "parse.y" ++#line 2213 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorMinus", "-<"); ;} + break; + + case 707: +-#line 2215 "parse.y" ++#line 2217 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilMult", "*>"); ;} + break; + + case 708: +-#line 2216 "parse.y" ++#line 2218 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("CeilRDiv", "/>"); ;} + break; + + case 709: +-#line 2217 "parse.y" ++#line 2219 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorMult", "*<"); ;} + break; + + case 710: +-#line 2218 "parse.y" ++#line 2220 "parse.y" + { ((*yyvalp).ttype) = get_identifier_with_spelling ("FloorRDiv", "/<"); ;} + break; + + case 713: +-#line 2230 "parse.y" +- { ((*yyvalp).ttype) = numeric_label ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2232 "parse.y" ++ { ((*yyvalp).ttype) = numeric_label ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 714: +-#line 2235 "parse.y" +- { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2237 "parse.y" ++ { ((*yyvalp).ttype) = nreverse ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 715: +-#line 2240 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2242 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 716: +-#line 2242 "parse.y" +- { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2244 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 717: +-#line 2244 "parse.y" ++#line 2246 "parse.y" + { +- ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); +- error ("comma missing after `%s'", IDENTIFIER_NAME (TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)))); ++ ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ++ error ("comma missing after `%s'", IDENTIFIER_NAME (TREE_VALUE ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)))); + yyerrok; + ;} + break; + + case 718: +-#line 2250 "parse.y" ++#line 2252 "parse.y" + { error ("extra comma following identifier list"); ;} + break; + + case 720: +-#line 2256 "parse.y" +- { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2258 "parse.y" ++ { ((*yyvalp).ttype) = build_tree_list (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 721: +-#line 2258 "parse.y" +- { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2260 "parse.y" ++ { ((*yyvalp).ttype) = tree_cons (NULL_TREE, (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 723: +-#line 2264 "parse.y" +- { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2266 "parse.y" ++ { ((*yyvalp).ttype) = build_qualified_id ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (3))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((3) - (3))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 724: +-#line 2269 "parse.y" ++#line 2271 "parse.y" + { warn_about_keyword_redeclaration (((*yyvalp).ttype), 1); ;} + break; + + case 771: +-#line 2323 "parse.y" +- { ((*yyvalp).ttype) = check_identifier ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype)); ;} ++#line 2325 "parse.y" ++ { ((*yyvalp).ttype) = check_identifier ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype)); ;} + break; + + case 780: +-#line 2340 "parse.y" +- { char c = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = make_identifier (&c, 1); ;} ++#line 2342 "parse.y" ++ { char c = (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.itype); ((*yyvalp).ttype) = make_identifier (&c, 1); ;} + break; + + case 781: +-#line 2347 "parse.y" ++#line 2349 "parse.y" + { pushlevel_expand (0); ;} + break; + + case 782: +-#line 2352 "parse.y" ++#line 2354 "parse.y" + { poplevel_expand (0, 1); ;} + break; + + case 783: +-#line 2357 "parse.y" ++#line 2359 "parse.y" + { lex_const_equal = 0; ;} + break; + + case 784: +-#line 2362 "parse.y" ++#line 2364 "parse.y" + { defining_packed_type += ((*yyvalp).itype) = !co->ignore_packed; /* can be nested */ ;} + break; + + case 785: +-#line 2367 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_protected); ;} ++#line 2369 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_protected); ;} + break; + + case 786: +-#line 2372 "parse.y" +- { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), p_module); ;} ++#line 2374 "parse.y" ++ { ASSERT_ID ((((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yysemantics.yysval.ttype), (((yyGLRStackItem const *)yyvsp)[YYFILL ((1) - (1))].yystate.yyloc), p_module); ;} + break; + + case 787: +-#line 2377 "parse.y" ++#line 2379 "parse.y" + { yyerrok; ;} + break; + + case 788: +-#line 2379 "parse.y" ++#line 2381 "parse.y" + { yyerrok; ;} + break; + + case 795: +-#line 2396 "parse.y" +- { warning ("missing `.' at the end of program/unit/module"); ;} ++#line 2398 "parse.y" ++ { gpc_warning ("missing `.' at the end of program/unit/module"); ;} + break; + + case 796: +-#line 2401 "parse.y" ++#line 2403 "parse.y" + { ((*yyvalp).ttype) = NULL_TREE; ;} + break; + + case 797: +-#line 2406 "parse.y" ++#line 2408 "parse.y" + { ((*yyvalp).ttype) = error_mark_node; ;} + break; + + ++/* Line 930 of glr.c. */ ++#line 7803 "parse.c" + default: break; + } + +@@ -8013,17 +7811,14 @@ + # undef YYBACKUP + # undef yyclearin + # undef YYRECOVERING +-/* Line 872 of glr.c. */ +-#line 8018 "parse.c" + } + + +-static void ++/*ARGSUSED*/ static void + yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) + { +- /* `Use' the arguments. */ +- (void) yy0; +- (void) yy1; ++ YYUSE (yy0); ++ YYUSE (yy1); + + switch (yyn) + { +@@ -8038,12 +7833,12 @@ + | Release the memory associated to this symbol. | + `-----------------------------------------------*/ + ++/*ARGSUSED*/ + static void + yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) + { +- /* Pacify ``unused variable'' warnings. */ +- (void) yyvaluep; +- (void) yylocationp; ++ YYUSE (yyvaluep); ++ YYUSE (yylocationp); + + if (!yymsg) + yymsg = "Deleting"; +@@ -8053,7 +7848,7 @@ + { + + default: +- break; ++ break; + } + } + +@@ -8075,27 +7870,30 @@ + #if YYDEBUG + if (yydebug) + { +- YYFPRINTF (stderr, "%s unresolved ", yymsg); +- yysymprint (stderr, yystos[yys->yylrState], +- &yys->yysemantics.yysval, &yys->yyloc); ++ if (yys->yysemantics.yyfirstVal) ++ YYFPRINTF (stderr, "%s unresolved ", yymsg); ++ else ++ YYFPRINTF (stderr, "%s incomplete ", yymsg); ++ yy_symbol_print (stderr, yystos[yys->yylrState], ++ NULL, &yys->yyloc); + YYFPRINTF (stderr, "\n"); + } + #endif + + if (yys->yysemantics.yyfirstVal) +- { +- yySemanticOption *yyoption = yys->yysemantics.yyfirstVal; +- yyGLRState *yyrh; +- int yyn; +- for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule); +- yyn > 0; +- yyrh = yyrh->yypred, yyn -= 1) +- yydestroyGLRState (yymsg, yyrh); +- } ++ { ++ yySemanticOption *yyoption = yys->yysemantics.yyfirstVal; ++ yyGLRState *yyrh; ++ int yyn; ++ for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule); ++ yyn > 0; ++ yyrh = yyrh->yypred, yyn -= 1) ++ yydestroyGLRState (yymsg, yyrh); ++ } + } + } + +-/** Left-hand-side symbol for rule #RULE. */ ++/** Left-hand-side symbol for rule #RULE. */ + static inline yySymbol + yylhsNonterm (yyRuleNum yyrule) + { +@@ -8106,14 +7904,14 @@ + ((yystate) == YYPACT_NINF) + + /** True iff LR state STATE has only a default reduction (regardless +- * of token). */ ++ * of token). */ + static inline yybool + yyisDefaultedState (yyStateNum yystate) + { + return yyis_pact_ninf (yypact[yystate]); + } + +-/** The default reduction for STATE, assuming it has one. */ ++/** The default reduction for STATE, assuming it has one. */ + static inline yyRuleNum + yydefaultAction (yyStateNum yystate) + { +@@ -8121,7 +7919,7 @@ + } + + #define yyis_table_ninf(yytable_value) \ +- 0 ++ YYID (0) + + /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN. + * Result R means +@@ -8133,7 +7931,7 @@ + */ + static inline void + yygetLRActions (yyStateNum yystate, int yytoken, +- int* yyaction, const short int** yyconflicts) ++ int* yyaction, const short int** yyconflicts) + { + int yyindex = yypact[yystate] + yytoken; + if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken) +@@ -8178,26 +7976,49 @@ + + /* GLRStates */ + ++/** Return a fresh GLRStackItem. Callers should call ++ * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient ++ * headroom. */ ++ ++static inline yyGLRStackItem* ++yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState) ++{ ++ yyGLRStackItem* yynewItem = yystackp->yynextFree; ++ yystackp->yyspaceLeft -= 1; ++ yystackp->yynextFree += 1; ++ yynewItem->yystate.yyisState = yyisState; ++ return yynewItem; ++} ++ ++/** Add a new semantic action that will execute the action for rule ++ * RULENUM on the semantic values in RHS to the list of ++ * alternative actions for STATE. Assumes that RHS comes from ++ * stack #K of *STACKP. */ + static void +-yyaddDeferredAction (yyGLRStack* yystack, yyGLRState* yystate, ++yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate, + yyGLRState* rhs, yyRuleNum yyrule) + { +- yySemanticOption* yynewItem; +- yynewItem = &yystack->yynextFree->yyoption; +- yystack->yyspaceLeft -= 1; +- yystack->yynextFree += 1; +- yynewItem->yyisState = yyfalse; +- yynewItem->yystate = rhs; +- yynewItem->yyrule = yyrule; +- yynewItem->yynext = yystate->yysemantics.yyfirstVal; +- yystate->yysemantics.yyfirstVal = yynewItem; +- if (yystack->yyspaceLeft < YYHEADROOM) +- yyexpandGLRStack (yystack); ++ yySemanticOption* yynewOption = ++ &yynewGLRStackItem (yystackp, yyfalse)->yyoption; ++ yynewOption->yystate = rhs; ++ yynewOption->yyrule = yyrule; ++ if (yystackp->yytops.yylookaheadNeeds[yyk]) ++ { ++ yynewOption->yyrawchar = yychar; ++ yynewOption->yyval = yylval; ++ yynewOption->yyloc = yylloc; ++ } ++ else ++ yynewOption->yyrawchar = YYEMPTY; ++ yynewOption->yynext = yystate->yysemantics.yyfirstVal; ++ yystate->yysemantics.yyfirstVal = yynewOption; ++ ++ YY_RESERVE_GLRSTACK (yystackp); + } + + /* GLRStacks */ + +-/** Initialize SET to a singleton set containing an empty stack. */ ++/** Initialize SET to a singleton set containing an empty stack. */ + static yybool + yyinitStateSet (yyGLRStateSet* yyset) + { +@@ -8207,58 +8028,67 @@ + if (! yyset->yystates) + return yyfalse; + yyset->yystates[0] = NULL; ++ yyset->yylookaheadNeeds = ++ (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]); ++ if (! yyset->yylookaheadNeeds) ++ { ++ YYFREE (yyset->yystates); ++ return yyfalse; ++ } + return yytrue; + } + + static void yyfreeStateSet (yyGLRStateSet* yyset) + { + YYFREE (yyset->yystates); ++ YYFREE (yyset->yylookaheadNeeds); + } + + /** Initialize STACK to a single empty stack, with total maximum +- * capacity for all stacks of SIZE. */ ++ * capacity for all stacks of SIZE. */ + static yybool +-yyinitGLRStack (yyGLRStack* yystack, size_t yysize) ++yyinitGLRStack (yyGLRStack* yystackp, size_t yysize) + { +- yystack->yyerrState = 0; ++ yystackp->yyerrState = 0; + yynerrs = 0; +- yystack->yyspaceLeft = yysize; +- yystack->yyitems = +- (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystack->yynextFree[0]); +- if (!yystack->yyitems) ++ yystackp->yyspaceLeft = yysize; ++ yystackp->yyitems = ++ (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]); ++ if (!yystackp->yyitems) + return yyfalse; +- yystack->yynextFree = yystack->yyitems; +- yystack->yysplitPoint = NULL; +- yystack->yylastDeleted = NULL; +- return yyinitStateSet (&yystack->yytops); ++ yystackp->yynextFree = yystackp->yyitems; ++ yystackp->yysplitPoint = NULL; ++ yystackp->yylastDeleted = NULL; ++ return yyinitStateSet (&yystackp->yytops); + } + +-#define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \ ++ ++#if YYSTACKEXPANDABLE ++# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \ + &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE + + /** If STACK is expandable, extend it. WARNING: Pointers into the + stack from outside should be considered invalid after this call. + We always expand when there are 1 or fewer items left AFTER an + allocation, so that we can avoid having external pointers exist +- across an allocation. */ ++ across an allocation. */ + static void +-yyexpandGLRStack (yyGLRStack* yystack) ++yyexpandGLRStack (yyGLRStack* yystackp) + { +-#if YYSTACKEXPANDABLE + yyGLRStackItem* yynewItems; + yyGLRStackItem* yyp0, *yyp1; + size_t yysize, yynewSize; + size_t yyn; +- yysize = yystack->yynextFree - yystack->yyitems; +- if (YYMAXDEPTH < yysize + YYHEADROOM) +- yyMemoryExhausted (yystack); ++ yysize = yystackp->yynextFree - yystackp->yyitems; ++ if (YYMAXDEPTH - YYHEADROOM < yysize) ++ yyMemoryExhausted (yystackp); + yynewSize = 2*yysize; + if (YYMAXDEPTH < yynewSize) + yynewSize = YYMAXDEPTH; + yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]); + if (! yynewItems) +- yyMemoryExhausted (yystack); +- for (yyp0 = yystack->yyitems, yyp1 = yynewItems, yyn = yysize; ++ yyMemoryExhausted (yystackp); ++ for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize; + 0 < yyn; + yyn -= 1, yyp0 += 1, yyp1 += 1) + { +@@ -8284,83 +8114,87 @@ + yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption); + } + } +- if (yystack->yysplitPoint != NULL) +- yystack->yysplitPoint = YYRELOC (yystack->yyitems, yynewItems, +- yystack->yysplitPoint, yystate); +- +- for (yyn = 0; yyn < yystack->yytops.yysize; yyn += 1) +- if (yystack->yytops.yystates[yyn] != NULL) +- yystack->yytops.yystates[yyn] = +- YYRELOC (yystack->yyitems, yynewItems, +- yystack->yytops.yystates[yyn], yystate); +- YYFREE (yystack->yyitems); +- yystack->yyitems = yynewItems; +- yystack->yynextFree = yynewItems + yysize; +- yystack->yyspaceLeft = yynewSize - yysize; +- +-#else +- yyMemoryExhausted (yystack); +-#endif ++ if (yystackp->yysplitPoint != NULL) ++ yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems, ++ yystackp->yysplitPoint, yystate); ++ ++ for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1) ++ if (yystackp->yytops.yystates[yyn] != NULL) ++ yystackp->yytops.yystates[yyn] = ++ YYRELOC (yystackp->yyitems, yynewItems, ++ yystackp->yytops.yystates[yyn], yystate); ++ YYFREE (yystackp->yyitems); ++ yystackp->yyitems = yynewItems; ++ yystackp->yynextFree = yynewItems + yysize; ++ yystackp->yyspaceLeft = yynewSize - yysize; + } ++#endif + + static void +-yyfreeGLRStack (yyGLRStack* yystack) ++yyfreeGLRStack (yyGLRStack* yystackp) + { +- YYFREE (yystack->yyitems); +- yyfreeStateSet (&yystack->yytops); ++ YYFREE (yystackp->yyitems); ++ yyfreeStateSet (&yystackp->yytops); + } + + /** Assuming that S is a GLRState somewhere on STACK, update the + * splitpoint of STACK, if needed, so that it is at least as deep as +- * S. */ ++ * S. */ + static inline void +-yyupdateSplit (yyGLRStack* yystack, yyGLRState* yys) ++yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys) + { +- if (yystack->yysplitPoint != NULL && yystack->yysplitPoint > yys) +- yystack->yysplitPoint = yys; ++ if (yystackp->yysplitPoint != NULL && yystackp->yysplitPoint > yys) ++ yystackp->yysplitPoint = yys; + } + +-/** Invalidate stack #K in STACK. */ ++/** Invalidate stack #K in STACK. */ + static inline void +-yymarkStackDeleted (yyGLRStack* yystack, size_t yyk) ++yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk) + { +- if (yystack->yytops.yystates[yyk] != NULL) +- yystack->yylastDeleted = yystack->yytops.yystates[yyk]; +- yystack->yytops.yystates[yyk] = NULL; ++ if (yystackp->yytops.yystates[yyk] != NULL) ++ yystackp->yylastDeleted = yystackp->yytops.yystates[yyk]; ++ yystackp->yytops.yystates[yyk] = NULL; + } + + /** Undelete the last stack that was marked as deleted. Can only be + done once after a deletion, and only when all other stacks have +- been deleted. */ ++ been deleted. */ + static void +-yyundeleteLastStack (yyGLRStack* yystack) ++yyundeleteLastStack (yyGLRStack* yystackp) + { +- if (yystack->yylastDeleted == NULL || yystack->yytops.yysize != 0) ++ if (yystackp->yylastDeleted == NULL || yystackp->yytops.yysize != 0) + return; +- yystack->yytops.yystates[0] = yystack->yylastDeleted; +- yystack->yytops.yysize = 1; ++ yystackp->yytops.yystates[0] = yystackp->yylastDeleted; ++ yystackp->yytops.yysize = 1; + YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n")); +- yystack->yylastDeleted = NULL; ++ yystackp->yylastDeleted = NULL; + } + + static inline void +-yyremoveDeletes (yyGLRStack* yystack) ++yyremoveDeletes (yyGLRStack* yystackp) + { + size_t yyi, yyj; + yyi = yyj = 0; +- while (yyj < yystack->yytops.yysize) ++ while (yyj < yystackp->yytops.yysize) + { +- if (yystack->yytops.yystates[yyi] == NULL) ++ if (yystackp->yytops.yystates[yyi] == NULL) + { + if (yyi == yyj) + { + YYDPRINTF ((stderr, "Removing dead stacks.\n")); + } +- yystack->yytops.yysize -= 1; ++ yystackp->yytops.yysize -= 1; + } + else + { +- yystack->yytops.yystates[yyj] = yystack->yytops.yystates[yyi]; ++ yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi]; ++ /* In the current implementation, it's unnecessary to copy ++ yystackp->yytops.yylookaheadNeeds[yyi] since, after ++ yyremoveDeletes returns, the parser immediately either enters ++ deterministic operation or shifts a token. However, it doesn't ++ hurt, and the code might evolve to need it. */ ++ yystackp->yytops.yylookaheadNeeds[yyj] = ++ yystackp->yytops.yylookaheadNeeds[yyi]; + if (yyj != yyi) + { + YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n", +@@ -8373,117 +8207,131 @@ + } + + /** Shift to a new state on stack #K of STACK, corresponding to LR state +- * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */ ++ * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */ + static inline void +-yyglrShift (yyGLRStack* yystack, size_t yyk, yyStateNum yylrState, ++yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState, + size_t yyposn, +- YYSTYPE yysval, YYLTYPE* yylocp) ++ YYSTYPE* yyvalp, YYLTYPE* yylocp) + { +- yyGLRStackItem* yynewItem; ++ yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate; ++ ++ yynewState->yylrState = yylrState; ++ yynewState->yyposn = yyposn; ++ yynewState->yyresolved = yytrue; ++ yynewState->yypred = yystackp->yytops.yystates[yyk]; ++ yynewState->yysemantics.yysval = *yyvalp; ++ yynewState->yyloc = *yylocp; ++ yystackp->yytops.yystates[yyk] = yynewState; + +- yynewItem = yystack->yynextFree; +- yystack->yynextFree += 1; +- yystack->yyspaceLeft -= 1; +- yynewItem->yystate.yyisState = yytrue; +- yynewItem->yystate.yylrState = yylrState; +- yynewItem->yystate.yyposn = yyposn; +- yynewItem->yystate.yyresolved = yytrue; +- yynewItem->yystate.yypred = yystack->yytops.yystates[yyk]; +- yystack->yytops.yystates[yyk] = &yynewItem->yystate; +- yynewItem->yystate.yysemantics.yysval = yysval; +- yynewItem->yystate.yyloc = *yylocp; +- if (yystack->yyspaceLeft < YYHEADROOM) +- yyexpandGLRStack (yystack); ++ YY_RESERVE_GLRSTACK (yystackp); + } + + /** Shift stack #K of YYSTACK, to a new state corresponding to LR + * state YYLRSTATE, at input position YYPOSN, with the (unresolved) +- * semantic value of YYRHS under the action for YYRULE. */ ++ * semantic value of YYRHS under the action for YYRULE. */ + static inline void +-yyglrShiftDefer (yyGLRStack* yystack, size_t yyk, yyStateNum yylrState, ++yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState, + size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule) + { +- yyGLRStackItem* yynewItem; ++ yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate; + +- yynewItem = yystack->yynextFree; +- yynewItem->yystate.yyisState = yytrue; +- yynewItem->yystate.yylrState = yylrState; +- yynewItem->yystate.yyposn = yyposn; +- yynewItem->yystate.yyresolved = yyfalse; +- yynewItem->yystate.yypred = yystack->yytops.yystates[yyk]; +- yynewItem->yystate.yysemantics.yyfirstVal = NULL; +- yystack->yytops.yystates[yyk] = &yynewItem->yystate; +- yystack->yynextFree += 1; +- yystack->yyspaceLeft -= 1; +- yyaddDeferredAction (yystack, &yynewItem->yystate, rhs, yyrule); ++ yynewState->yylrState = yylrState; ++ yynewState->yyposn = yyposn; ++ yynewState->yyresolved = yyfalse; ++ yynewState->yypred = yystackp->yytops.yystates[yyk]; ++ yynewState->yysemantics.yyfirstVal = NULL; ++ yystackp->yytops.yystates[yyk] = yynewState; ++ ++ /* Invokes YY_RESERVE_GLRSTACK. */ ++ yyaddDeferredAction (yystackp, yyk, yynewState, rhs, yyrule); + } + + /** Pop the symbols consumed by reduction #RULE from the top of stack + * #K of STACK, and perform the appropriate semantic action on their + * semantic values. Assumes that all ambiguities in semantic values +- * have been previously resolved. Set *VALP to the resulting value, ++ * have been previously resolved. Set *VALP to the resulting value, + * and *LOCP to the computed location (if any). Return value is as +- * for userAction. */ ++ * for userAction. */ + static inline YYRESULTTAG +-yydoAction (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, ++yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, + YYSTYPE* yyvalp, YYLTYPE* yylocp) + { + int yynrhs = yyrhsLength (yyrule); + +- if (yystack->yysplitPoint == NULL) ++ if (yystackp->yysplitPoint == NULL) + { +- /* Standard special case: single stack. */ +- yyGLRStackItem* rhs = (yyGLRStackItem*) yystack->yytops.yystates[yyk]; ++ /* Standard special case: single stack. */ ++ yyGLRStackItem* rhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk]; + YYASSERT (yyk == 0); +- yystack->yynextFree -= yynrhs; +- yystack->yyspaceLeft += yynrhs; +- yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate; ++ yystackp->yynextFree -= yynrhs; ++ yystackp->yyspaceLeft += yynrhs; ++ yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate; + return yyuserAction (yyrule, yynrhs, rhs, +- yyvalp, yylocp, yystack); ++ yyvalp, yylocp, yystackp); + } + else + { ++ /* At present, doAction is never called in nondeterministic ++ * mode, so this branch is never taken. It is here in ++ * anticipation of a future feature that will allow immediate ++ * evaluation of selected actions in nondeterministic mode. */ + int yyi; + yyGLRState* yys; + yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1]; + yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred +- = yystack->yytops.yystates[yyk]; ++ = yystackp->yytops.yystates[yyk]; ++ if (yynrhs == 0) ++ /* Set default location. */ ++ yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc; + for (yyi = 0; yyi < yynrhs; yyi += 1) + { + yys = yys->yypred; + YYASSERT (yys); + } +- yyupdateSplit (yystack, yys); +- yystack->yytops.yystates[yyk] = yys; ++ yyupdateSplit (yystackp, yys); ++ yystackp->yytops.yystates[yyk] = yys; + return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, +- yyvalp, yylocp, yystack); ++ yyvalp, yylocp, yystackp); + } + } + + #if !YYDEBUG +-# define YY_REDUCE_PRINT(K, Rule) ++# define YY_REDUCE_PRINT(Args) + #else +-# define YY_REDUCE_PRINT(K, Rule) \ ++# define YY_REDUCE_PRINT(Args) \ + do { \ + if (yydebug) \ +- yy_reduce_print (K, Rule); \ +-} while (0) ++ yy_reduce_print Args; \ ++} while (YYID (0)) + + /*----------------------------------------------------------. + | Report that the RULE is going to be reduced on stack #K. | + `----------------------------------------------------------*/ + +-static inline void +-yy_reduce_print (size_t yyk, yyRuleNum yyrule) ++/*ARGSUSED*/ static inline void ++yy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, ++ YYSTYPE* yyvalp, YYLTYPE* yylocp) + { ++ int yynrhs = yyrhsLength (yyrule); ++ yybool yynormal __attribute__ ((__unused__)) = ++ (yystackp->yysplitPoint == NULL); ++ yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk]; ++ int yylow = 1; + int yyi; +- YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu), ", ++ YYUSE (yyvalp); ++ YYUSE (yylocp); ++ YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n", + (unsigned long int) yyk, yyrule - 1, + (unsigned long int) yyrline[yyrule]); +- /* Print the symbols being reduced, and their result. */ +- for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) +- YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi])); +- YYFPRINTF (stderr, "-> %s\n", yytokenName (yyr1[yyrule])); ++ /* The symbols being reduced. */ ++ for (yyi = 0; yyi < yynrhs; yyi++) ++ { ++ fprintf (stderr, " $%d = ", yyi + 1); ++ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], ++ &(((yyGLRStackItem const *)yyvsp)[YYFILL ((yyi + 1) - (yynrhs))].yystate.yysemantics.yysval) ++ , &(((yyGLRStackItem const *)yyvsp)[YYFILL ((yyi + 1) - (yynrhs))].yystate.yyloc) ); ++ fprintf (stderr, "\n"); ++ } + } + #endif + +@@ -8495,56 +8343,58 @@ + * the new state. If the new state would have an identical input + * position, LR state, and predecessor to an existing state on the stack, + * it is identified with that existing state, eliminating stack #K from +- * the STACK. In this case, the (necessarily deferred) semantic value is ++ * the STACK. In this case, the (necessarily deferred) semantic value is + * added to the options for the existing state's semantic value. + */ + static inline YYRESULTTAG +-yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule, +- yybool yyforceEval) ++yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, ++ yybool yyforceEval) + { +- size_t yyposn = yystack->yytops.yystates[yyk]->yyposn; ++ size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn; + +- if (yyforceEval || yystack->yysplitPoint == NULL) ++ if (yyforceEval || yystackp->yysplitPoint == NULL) + { + YYSTYPE yysval; + YYLTYPE yyloc; + +- YY_REDUCE_PRINT (yyk, yyrule); +- YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc)); +- yyglrShift (yystack, yyk, +- yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState, ++ YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval, &yyloc)); ++ YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval, ++ &yyloc)); ++ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc); ++ yyglrShift (yystackp, yyk, ++ yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState, + yylhsNonterm (yyrule)), +- yyposn, yysval, &yyloc); ++ yyposn, &yysval, &yyloc); + } + else + { + size_t yyi; + int yyn; +- yyGLRState* yys, *yys0 = yystack->yytops.yystates[yyk]; ++ yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk]; + yyStateNum yynewLRState; + +- for (yys = yystack->yytops.yystates[yyk], yyn = yyrhsLength (yyrule); ++ for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule); + 0 < yyn; yyn -= 1) + { + yys = yys->yypred; + YYASSERT (yys); + } +- yyupdateSplit (yystack, yys); ++ yyupdateSplit (yystackp, yys); + yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule)); + YYDPRINTF ((stderr, +- "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n", ++ "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n", + (unsigned long int) yyk, yyrule - 1, yynewLRState)); +- for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1) +- if (yyi != yyk && yystack->yytops.yystates[yyi] != NULL) ++ for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1) ++ if (yyi != yyk && yystackp->yytops.yystates[yyi] != NULL) + { +- yyGLRState* yyp, *yysplit = yystack->yysplitPoint; +- yyp = yystack->yytops.yystates[yyi]; ++ yyGLRState* yyp, *yysplit = yystackp->yysplitPoint; ++ yyp = yystackp->yytops.yystates[yyi]; + while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn) + { + if (yyp->yylrState == yynewLRState && yyp->yypred == yys) + { +- yyaddDeferredAction (yystack, yyp, yys0, yyrule); +- yymarkStackDeleted (yystack, yyk); ++ yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule); ++ yymarkStackDeleted (yystackp, yyk); + YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n", + (unsigned long int) yyk, + (unsigned long int) yyi)); +@@ -8553,41 +8403,59 @@ + yyp = yyp->yypred; + } + } +- yystack->yytops.yystates[yyk] = yys; +- yyglrShiftDefer (yystack, yyk, yynewLRState, yyposn, yys0, yyrule); ++ yystackp->yytops.yystates[yyk] = yys; ++ yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule); + } + return yyok; + } + + static size_t +-yysplitStack (yyGLRStack* yystack, size_t yyk) ++yysplitStack (yyGLRStack* yystackp, size_t yyk) + { +- if (yystack->yysplitPoint == NULL) ++ if (yystackp->yysplitPoint == NULL) + { + YYASSERT (yyk == 0); +- yystack->yysplitPoint = yystack->yytops.yystates[yyk]; ++ yystackp->yysplitPoint = yystackp->yytops.yystates[yyk]; + } +- if (yystack->yytops.yysize >= yystack->yytops.yycapacity) ++ if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity) + { + yyGLRState** yynewStates; +- if (! ((yystack->yytops.yycapacity +- <= (YYSIZEMAX / (2 * sizeof yynewStates[0]))) +- && (yynewStates = +- (yyGLRState**) YYREALLOC (yystack->yytops.yystates, +- ((yystack->yytops.yycapacity *= 2) +- * sizeof yynewStates[0]))))) +- yyMemoryExhausted (yystack); +- yystack->yytops.yystates = yynewStates; +- } +- yystack->yytops.yystates[yystack->yytops.yysize] +- = yystack->yytops.yystates[yyk]; +- yystack->yytops.yysize += 1; +- return yystack->yytops.yysize-1; ++ yybool* yynewLookaheadNeeds; ++ ++ yynewStates = NULL; ++ ++ if (yystackp->yytops.yycapacity ++ > (YYSIZEMAX / (2 * sizeof yynewStates[0]))) ++ yyMemoryExhausted (yystackp); ++ yystackp->yytops.yycapacity *= 2; ++ ++ yynewStates = ++ (yyGLRState**) YYREALLOC (yystackp->yytops.yystates, ++ (yystackp->yytops.yycapacity ++ * sizeof yynewStates[0])); ++ if (yynewStates == NULL) ++ yyMemoryExhausted (yystackp); ++ yystackp->yytops.yystates = yynewStates; ++ ++ yynewLookaheadNeeds = ++ (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds, ++ (yystackp->yytops.yycapacity ++ * sizeof yynewLookaheadNeeds[0])); ++ if (yynewLookaheadNeeds == NULL) ++ yyMemoryExhausted (yystackp); ++ yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds; ++ } ++ yystackp->yytops.yystates[yystackp->yytops.yysize] ++ = yystackp->yytops.yystates[yyk]; ++ yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize] ++ = yystackp->yytops.yylookaheadNeeds[yyk]; ++ yystackp->yytops.yysize += 1; ++ return yystackp->yytops.yysize-1; + } + + /** True iff Y0 and Y1 represent identical options at the top level. + * That is, they represent the same rule applied to RHS symbols +- * that produce the same terminal symbols. */ ++ * that produce the same terminal symbols. */ + static yybool + yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1) + { +@@ -8608,7 +8476,7 @@ + } + + /** Assuming identicalOptions (Y0,Y1), destructively merge the +- * alternative semantic values for the RHS-symbols of Y1 and Y0. */ ++ * alternative semantic values for the RHS-symbols of Y1 and Y0. */ + static void + yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1) + { +@@ -8637,7 +8505,7 @@ + yySemanticOption* yyz1; + yyz0p = &yys0->yysemantics.yyfirstVal; + yyz1 = yys1->yysemantics.yyfirstVal; +- while (yytrue) ++ while (YYID (yytrue)) + { + if (yyz1 == *yyz0p || yyz1 == NULL) + break; +@@ -8662,7 +8530,7 @@ + + /** Y0 and Y1 represent two possible actions to take in a given + * parsing state; return 0 if no combination is possible, +- * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */ ++ * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */ + static int + yypreference (yySemanticOption* y0, yySemanticOption* y1) + { +@@ -8685,46 +8553,71 @@ + return 0; + } + +-static YYRESULTTAG yyresolveValue (yySemanticOption* yyoptionList, +- yyGLRStack* yystack, YYSTYPE* yyvalp, +- YYLTYPE* yylocp); ++static YYRESULTTAG yyresolveValue (yyGLRState* yys, ++ yyGLRStack* yystackp); + ++ ++/** Resolve the previous N states starting at and including state S. If result ++ * != yyok, some states may have been left unresolved possibly with empty ++ * semantic option chains. Regardless of whether result = yyok, each state ++ * has been left with consistent data so that yydestroyGLRState can be invoked ++ * if necessary. */ + static YYRESULTTAG +-yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystack) ++yyresolveStates (yyGLRState* yys, int yyn, ++ yyGLRStack* yystackp) + { +- YYRESULTTAG yyflag; + if (0 < yyn) + { + YYASSERT (yys->yypred); +- yyflag = yyresolveStates (yys->yypred, yyn-1, yystack); +- if (yyflag != yyok) +- return yyflag; ++ YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp)); + if (! yys->yyresolved) +- { +- yyflag = yyresolveValue (yys->yysemantics.yyfirstVal, yystack, +- &yys->yysemantics.yysval, &yys->yyloc +- ); +- if (yyflag != yyok) +- return yyflag; +- yys->yyresolved = yytrue; +- } ++ YYCHK (yyresolveValue (yys, yystackp)); + } + return yyok; + } + ++/** Resolve the states for the RHS of OPT, perform its user action, and return ++ * the semantic value and location. Regardless of whether result = yyok, all ++ * RHS states have been destroyed (assuming the user action destroys all RHS ++ * semantic values if invoked). */ + static YYRESULTTAG +-yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack, +- YYSTYPE* yyvalp, YYLTYPE* yylocp) ++yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp, ++ YYSTYPE* yyvalp, YYLTYPE* yylocp) + { + yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1]; + int yynrhs; ++ int yychar_current; ++ YYSTYPE yylval_current; ++ YYLTYPE yylloc_current; ++ YYRESULTTAG yyflag; + + yynrhs = yyrhsLength (yyopt->yyrule); +- YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack)); ++ yyflag = yyresolveStates (yyopt->yystate, yynrhs, yystackp); ++ if (yyflag != yyok) ++ { ++ yyGLRState *yys; ++ for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1) ++ yydestroyGLRState ("Cleanup: popping", yys); ++ return yyflag; ++ } ++ + yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate; +- return yyuserAction (yyopt->yyrule, yynrhs, +- yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, +- yyvalp, yylocp, yystack); ++ if (yynrhs == 0) ++ /* Set default location. */ ++ yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc; ++ yychar_current = yychar; ++ yylval_current = yylval; ++ yylloc_current = yylloc; ++ yychar = yyopt->yyrawchar; ++ yylval = yyopt->yyval; ++ yylloc = yyopt->yyloc; ++ yyflag = yyuserAction (yyopt->yyrule, yynrhs, ++ yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, ++ yyvalp, yylocp, yystackp); ++ yychar = yychar_current; ++ yylval = yylval_current; ++ yylloc = yylloc_current; ++ return yyflag; + } + + #if YYDEBUG +@@ -8734,7 +8627,7 @@ + int yynrhs = yyrhsLength (yyx->yyrule); + int yyi; + yyGLRState* yys; +- yyGLRState* yystates[YYMAXRHS]; ++ yyGLRState* yystates[1 + YYMAXRHS]; + yyGLRState yyleftmost_state; + + for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred) +@@ -8750,11 +8643,11 @@ + if (yyx->yystate->yyposn < yys->yyposn + 1) + YYFPRINTF (stderr, "%*s%s -> \n", + yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), +- yyx->yyrule); ++ yyx->yyrule - 1); + else + YYFPRINTF (stderr, "%*s%s -> \n", + yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), +- yyx->yyrule, (unsigned long int) (yys->yyposn + 1), ++ yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1), + (unsigned long int) yyx->yystate->yyposn); + for (yyi = 1; yyi <= yynrhs; yyi += 1) + { +@@ -8775,16 +8668,12 @@ + } + #endif + +-static void yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, +- yyGLRStack* yystack) +- __attribute__ ((__noreturn__)); +-static void +-yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, +- yyGLRStack* yystack) ++/*ARGSUSED*/ static YYRESULTTAG ++yyreportAmbiguity (yySemanticOption* yyx0, ++ yySemanticOption* yyx1) + { +- /* `Unused' warnings. */ +- (void) yyx0; +- (void) yyx1; ++ YYUSE (yyx0); ++ YYUSE (yyx1); + + #if YYDEBUG + YYFPRINTF (stderr, "Ambiguity detected.\n"); +@@ -8794,19 +8683,85 @@ + yyreportTree (yyx1, 2); + YYFPRINTF (stderr, "\n"); + #endif +- yyFail (yystack, YY_("syntax is ambiguous")); ++ ++ yyerror (YY_("syntax is ambiguous")); ++ return yyabort; + } + ++/** Starting at and including state S1, resolve the location for each of the ++ * previous N1 states that is unresolved. The first semantic option of a state ++ * is always chosen. */ ++static void ++yyresolveLocations (yyGLRState* yys1, int yyn1, ++ yyGLRStack *yystackp) ++{ ++ if (0 < yyn1) ++ { ++ yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp); ++ if (!yys1->yyresolved) ++ { ++ yySemanticOption *yyoption; ++ yyGLRStackItem yyrhsloc[1 + YYMAXRHS]; ++ int yynrhs; ++ int yychar_current; ++ YYSTYPE yylval_current; ++ YYLTYPE yylloc_current; ++ yyoption = yys1->yysemantics.yyfirstVal; ++ YYASSERT (yyoption != NULL); ++ yynrhs = yyrhsLength (yyoption->yyrule); ++ if (yynrhs > 0) ++ { ++ yyGLRState *yys; ++ int yyn; ++ yyresolveLocations (yyoption->yystate, yynrhs, ++ yystackp); ++ for (yys = yyoption->yystate, yyn = yynrhs; ++ yyn > 0; ++ yys = yys->yypred, yyn -= 1) ++ yyrhsloc[yyn].yystate.yyloc = yys->yyloc; ++ } ++ else ++ { ++ /* Both yyresolveAction and yyresolveLocations traverse the GSS ++ in reverse rightmost order. It is only necessary to invoke ++ yyresolveLocations on a subforest for which yyresolveAction ++ would have been invoked next had an ambiguity not been ++ detected. Thus the location of the previous state (but not ++ necessarily the previous state itself) is guaranteed to be ++ resolved already. */ ++ yyGLRState *yyprevious = yyoption->yystate; ++ yyrhsloc[0].yystate.yyloc = yyprevious->yyloc; ++ } ++ yychar_current = yychar; ++ yylval_current = yylval; ++ yylloc_current = yylloc; ++ yychar = yyoption->yyrawchar; ++ yylval = yyoption->yyval; ++ yylloc = yyoption->yyloc; ++ YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs); ++ yychar = yychar_current; ++ yylval = yylval_current; ++ yylloc = yylloc_current; ++ } ++ } ++} + +-/** Resolve the ambiguity represented by OPTIONLIST, perform the indicated +- * actions, and return the result. */ ++/** Resolve the ambiguity represented in state S, perform the indicated ++ * actions, and set the semantic value of S. If result != yyok, the chain of ++ * semantic options in S has been cleared instead or it has been left ++ * unmodified except that redundant options may have been removed. Regardless ++ * of whether result = yyok, S has been left with consistent data so that ++ * yydestroyGLRState can be invoked if necessary. */ + static YYRESULTTAG +-yyresolveValue (yySemanticOption* yyoptionList, yyGLRStack* yystack, +- YYSTYPE* yyvalp, YYLTYPE* yylocp) ++yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp) + { ++ yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal; + yySemanticOption* yybest; + yySemanticOption** yypp; + yybool yymerge; ++ YYSTYPE yysval; ++ YYRESULTTAG yyflag; ++ YYLTYPE *yylocp = &yys->yyloc; + + yybest = yyoptionList; + yymerge = yyfalse; +@@ -8824,7 +8779,8 @@ + switch (yypreference (yybest, yyp)) + { + case 0: +- yyreportAmbiguity (yybest, yyp, yystack); ++ yyresolveLocations (yys, 1, yystackp); ++ return yyreportAmbiguity (yybest, yyp); + break; + case 1: + yymerge = yytrue; +@@ -8837,7 +8793,7 @@ + break; + default: + /* This cannot happen so it is not worth a YYASSERT (yyfalse), +- but some compilers complain if the default case is ++ but some compilers complain if the default case is + omitted. */ + break; + } +@@ -8849,84 +8805,100 @@ + { + yySemanticOption* yyp; + int yyprec = yydprec[yybest->yyrule]; +- YYCHK (yyresolveAction (yybest, yystack, yyvalp, yylocp)); +- for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext) +- { +- if (yyprec == yydprec[yyp->yyrule]) +- { +- YYSTYPE yyval1; +- YYLTYPE yydummy; +- YYCHK (yyresolveAction (yyp, yystack, &yyval1, &yydummy)); +- yyuserMerge (yymerger[yyp->yyrule], yyvalp, &yyval1); +- } +- } +- return yyok; ++ yyflag = yyresolveAction (yybest, yystackp, &yysval, ++ yylocp); ++ if (yyflag == yyok) ++ for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext) ++ { ++ if (yyprec == yydprec[yyp->yyrule]) ++ { ++ YYSTYPE yysval_other; ++ YYLTYPE yydummy; ++ yyflag = yyresolveAction (yyp, yystackp, &yysval_other, ++ &yydummy); ++ if (yyflag != yyok) ++ { ++ yydestruct ("Cleanup: discarding incompletely merged value for", ++ yystos[yys->yylrState], ++ &yysval, yylocp); ++ break; ++ } ++ yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other); ++ } ++ } ++ } ++ else ++ yyflag = yyresolveAction (yybest, yystackp, &yysval, yylocp); ++ ++ if (yyflag == yyok) ++ { ++ yys->yyresolved = yytrue; ++ yys->yysemantics.yysval = yysval; + } + else +- return yyresolveAction (yybest, yystack, yyvalp, yylocp); ++ yys->yysemantics.yyfirstVal = NULL; ++ return yyflag; + } + + static YYRESULTTAG +-yyresolveStack (yyGLRStack* yystack) ++yyresolveStack (yyGLRStack* yystackp) + { +- if (yystack->yysplitPoint != NULL) ++ if (yystackp->yysplitPoint != NULL) + { + yyGLRState* yys; + int yyn; + +- for (yyn = 0, yys = yystack->yytops.yystates[0]; +- yys != yystack->yysplitPoint; ++ for (yyn = 0, yys = yystackp->yytops.yystates[0]; ++ yys != yystackp->yysplitPoint; + yys = yys->yypred, yyn += 1) + continue; +- YYCHK (yyresolveStates (yystack->yytops.yystates[0], yyn, yystack ++ YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp + )); + } + return yyok; + } + + static void +-yycompressStack (yyGLRStack* yystack) ++yycompressStack (yyGLRStack* yystackp) + { + yyGLRState* yyp, *yyq, *yyr; + +- if (yystack->yytops.yysize != 1 || yystack->yysplitPoint == NULL) ++ if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == NULL) + return; + +- for (yyp = yystack->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL; +- yyp != yystack->yysplitPoint; ++ for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL; ++ yyp != yystackp->yysplitPoint; + yyr = yyp, yyp = yyq, yyq = yyp->yypred) + yyp->yypred = yyr; + +- yystack->yyspaceLeft += yystack->yynextFree - yystack->yyitems; +- yystack->yynextFree = ((yyGLRStackItem*) yystack->yysplitPoint) + 1; +- yystack->yyspaceLeft -= yystack->yynextFree - yystack->yyitems; +- yystack->yysplitPoint = NULL; +- yystack->yylastDeleted = NULL; ++ yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems; ++ yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1; ++ yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems; ++ yystackp->yysplitPoint = NULL; ++ yystackp->yylastDeleted = NULL; + + while (yyr != NULL) + { +- yystack->yynextFree->yystate = *yyr; ++ yystackp->yynextFree->yystate = *yyr; + yyr = yyr->yypred; +- yystack->yynextFree->yystate.yypred = & yystack->yynextFree[-1].yystate; +- yystack->yytops.yystates[0] = &yystack->yynextFree->yystate; +- yystack->yynextFree += 1; +- yystack->yyspaceLeft -= 1; ++ yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate; ++ yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate; ++ yystackp->yynextFree += 1; ++ yystackp->yyspaceLeft -= 1; + } + } + + static YYRESULTTAG +-yyprocessOneStack (yyGLRStack* yystack, size_t yyk, +- size_t yyposn, YYSTYPE* yylvalp, YYLTYPE* yyllocp +- ) ++yyprocessOneStack (yyGLRStack* yystackp, size_t yyk, ++ size_t yyposn) + { + int yyaction; + const short int* yyconflicts; + yyRuleNum yyrule; +- yySymbol* const yytokenp = yystack->yytokenp; + +- while (yystack->yytops.yystates[yyk] != NULL) ++ while (yystackp->yytops.yystates[yyk] != NULL) + { +- yyStateNum yystate = yystack->yytops.yystates[yyk]->yylrState; ++ yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState; + YYDPRINTF ((stderr, "Stack %lu Entering state %d\n", + (unsigned long int) yyk, yystate)); + +@@ -8939,77 +8911,68 @@ + { + YYDPRINTF ((stderr, "Stack %lu dies.\n", + (unsigned long int) yyk)); +- yymarkStackDeleted (yystack, yyk); ++ yymarkStackDeleted (yystackp, yyk); + return yyok; + } +- YYCHK (yyglrReduce (yystack, yyk, yyrule, yyfalse)); ++ YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse)); + } + else + { +- if (*yytokenp == YYEMPTY) ++ yySymbol yytoken; ++ yystackp->yytops.yylookaheadNeeds[yyk] = yytrue; ++ if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; +- *yytokenp = YYTRANSLATE (yychar); +- YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp); ++ yytoken = YYTRANSLATE (yychar); ++ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } +- yygetLRActions (yystate, *yytokenp, &yyaction, &yyconflicts); ++ else ++ yytoken = YYTRANSLATE (yychar); ++ yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); + + while (*yyconflicts != 0) + { +- size_t yynewStack = yysplitStack (yystack, yyk); ++ size_t yynewStack = yysplitStack (yystackp, yyk); + YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n", + (unsigned long int) yynewStack, + (unsigned long int) yyk)); +- YYCHK (yyglrReduce (yystack, yynewStack, ++ YYCHK (yyglrReduce (yystackp, yynewStack, + *yyconflicts, yyfalse)); +- YYCHK (yyprocessOneStack (yystack, yynewStack, yyposn, +- yylvalp, yyllocp)); ++ YYCHK (yyprocessOneStack (yystackp, yynewStack, ++ yyposn)); + yyconflicts += 1; + } + + if (yyisShiftAction (yyaction)) +- { +- YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yyk)); +- YY_SYMBOL_PRINT ("shifting", *yytokenp, yylvalp, yyllocp); +- yyglrShift (yystack, yyk, yyaction, yyposn+1, +- *yylvalp, yyllocp); +- YYDPRINTF ((stderr, "Stack %lu now in state #%d\n", +- (unsigned long int) yyk, +- yystack->yytops.yystates[yyk]->yylrState)); +- break; +- } ++ break; + else if (yyisErrorAction (yyaction)) + { + YYDPRINTF ((stderr, "Stack %lu dies.\n", + (unsigned long int) yyk)); +- yymarkStackDeleted (yystack, yyk); ++ yymarkStackDeleted (yystackp, yyk); + break; + } + else +- YYCHK (yyglrReduce (yystack, yyk, -yyaction, yyfalse)); ++ YYCHK (yyglrReduce (yystackp, yyk, -yyaction, ++ yyfalse)); + } + } + return yyok; + } + +-static void +-yyreportSyntaxError (yyGLRStack* yystack, +- YYSTYPE* yylvalp, YYLTYPE* yyllocp) ++/*ARGSUSED*/ static void ++yyreportSyntaxError (yyGLRStack* yystackp) + { +- /* `Unused' warnings. */ +- (void) yylvalp; +- (void) yyllocp; +- +- if (yystack->yyerrState == 0) ++ if (yystackp->yyerrState == 0) + { + #if YYERROR_VERBOSE +- yySymbol* const yytokenp = yystack->yytokenp; + int yyn; +- yyn = yypact[yystack->yytops.yystates[0]->yylrState]; +- if (YYPACT_NINF < yyn && yyn < YYLAST) ++ yyn = yypact[yystackp->yytops.yystates[0]->yylrState]; ++ if (YYPACT_NINF < yyn && yyn <= YYLAST) + { +- size_t yysize0 = yytnamerr (NULL, yytokenName (*yytokenp)); ++ yySymbol yytoken = YYTRANSLATE (yychar); ++ size_t yysize0 = yytnamerr (NULL, yytokenName (yytoken)); + size_t yysize = yysize0; + size_t yysize1; + yybool yysize_overflow = yyfalse; +@@ -9033,11 +8996,11 @@ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ +- int yychecklim = YYLAST - yyn; ++ int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + +- yyarg[0] = yytokenName (*yytokenp); ++ yyarg[0] = yytokenName (yytoken); + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) +@@ -9089,7 +9052,7 @@ + else + { + yyerror (YY_("syntax error")); +- yyMemoryExhausted (yystack); ++ yyMemoryExhausted (yystackp); + } + } + else +@@ -9099,49 +9062,47 @@ + } + } + +-/* Recover from a syntax error on YYSTACK, assuming that YYTOKENP, +- YYLVALP, and YYLLOCP point to the syntactic category, semantic +- value, and location of the look-ahead. */ +-static void +-yyrecoverSyntaxError (yyGLRStack* yystack, +- YYSTYPE* yylvalp, +- YYLTYPE* YYOPTIONAL_LOC (yyllocp) +- ) ++/* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP, ++ yylval, and yylloc are the syntactic category, semantic value, and location ++ of the look-ahead. */ ++/*ARGSUSED*/ static void ++yyrecoverSyntaxError (yyGLRStack* yystackp) + { +- yySymbol* const yytokenp = yystack->yytokenp; + size_t yyk; + int yyj; + +- if (yystack->yyerrState == 3) ++ if (yystackp->yyerrState == 3) + /* We just shifted the error token and (perhaps) took some + reductions. Skip tokens until we can proceed. */ +- while (yytrue) ++ while (YYID (yytrue)) + { +- if (*yytokenp == YYEOF) +- yyFail (yystack, NULL); +- if (*yytokenp != YYEMPTY) ++ yySymbol yytoken; ++ if (yychar == YYEOF) ++ yyFail (yystackp, NULL); ++ if (yychar != YYEMPTY) + { + /* We throw away the lookahead, but the error range +- of the shifted error token must take it into account. */ +- yyGLRState *yys = yystack->yytops.yystates[0]; ++ of the shifted error token must take it into account. */ ++ yyGLRState *yys = yystackp->yytops.yystates[0]; + yyGLRStackItem yyerror_range[3]; + yyerror_range[1].yystate.yyloc = yys->yyloc; +- yyerror_range[2].yystate.yyloc = *yyllocp; +- YYLLOC_DEFAULT (yys->yyloc, yyerror_range, 2); ++ yyerror_range[2].yystate.yyloc = yylloc; ++ YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2); ++ yytoken = YYTRANSLATE (yychar); + yydestruct ("Error: discarding", +- *yytokenp, yylvalp, yyllocp); ++ yytoken, &yylval, &yylloc); + } + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; +- *yytokenp = YYTRANSLATE (yychar); +- YY_SYMBOL_PRINT ("Next token is", *yytokenp, yylvalp, yyllocp); +- yyj = yypact[yystack->yytops.yystates[0]->yylrState]; ++ yytoken = YYTRANSLATE (yychar); ++ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); ++ yyj = yypact[yystackp->yytops.yystates[0]->yylrState]; + if (yyis_pact_ninf (yyj)) + return; +- yyj += *yytokenp; +- if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp) ++ yyj += yytoken; ++ if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken) + { +- if (yydefact[yystack->yytops.yystates[0]->yylrState] != 0) ++ if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0) + return; + } + else if (yytable[yyj] != 0 && ! yyis_table_ninf (yytable[yyj])) +@@ -9149,21 +9110,21 @@ + } + + /* Reduce to one stack. */ +- for (yyk = 0; yyk < yystack->yytops.yysize; yyk += 1) +- if (yystack->yytops.yystates[yyk] != NULL) ++ for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1) ++ if (yystackp->yytops.yystates[yyk] != NULL) + break; +- if (yyk >= yystack->yytops.yysize) +- yyFail (yystack, NULL); +- for (yyk += 1; yyk < yystack->yytops.yysize; yyk += 1) +- yymarkStackDeleted (yystack, yyk); +- yyremoveDeletes (yystack); +- yycompressStack (yystack); +- +- /* Now pop stack until we find a state that shifts the error token. */ +- yystack->yyerrState = 3; +- while (yystack->yytops.yystates[0] != NULL) ++ if (yyk >= yystackp->yytops.yysize) ++ yyFail (yystackp, NULL); ++ for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1) ++ yymarkStackDeleted (yystackp, yyk); ++ yyremoveDeletes (yystackp); ++ yycompressStack (yystackp); ++ ++ /* Now pop stack until we find a state that shifts the error token. */ ++ yystackp->yyerrState = 3; ++ while (yystackp->yytops.yystates[0] != NULL) + { +- yyGLRState *yys = yystack->yytops.yystates[0]; ++ yyGLRState *yys = yystackp->yytops.yystates[0]; + yyj = yypact[yys->yylrState]; + if (! yyis_pact_ninf (yyj)) + { +@@ -9173,24 +9134,24 @@ + { + /* Shift the error token having adjusted its location. */ + YYLTYPE yyerrloc; +- yystack->yyerror_range[2].yystate.yyloc = *yyllocp; +- YYLLOC_DEFAULT (yyerrloc, yystack->yyerror_range, 2); ++ yystackp->yyerror_range[2].yystate.yyloc = yylloc; ++ YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2); + YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]], +- yylvalp, &yyerrloc); +- yyglrShift (yystack, 0, yytable[yyj], +- yys->yyposn, *yylvalp, &yyerrloc); +- yys = yystack->yytops.yystates[0]; ++ &yylval, &yyerrloc); ++ yyglrShift (yystackp, 0, yytable[yyj], ++ yys->yyposn, &yylval, &yyerrloc); ++ yys = yystackp->yytops.yystates[0]; + break; + } + } +- yystack->yyerror_range[1].yystate.yyloc = yys->yyloc; ++ yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc; + yydestroyGLRState ("Error: popping", yys); +- yystack->yytops.yystates[0] = yys->yypred; +- yystack->yynextFree -= 1; +- yystack->yyspaceLeft += 1; ++ yystackp->yytops.yystates[0] = yys->yypred; ++ yystackp->yynextFree -= 1; ++ yystackp->yyspaceLeft += 1; + } +- if (yystack->yytops.yystates[0] == NULL) +- yyFail (yystack, NULL); ++ if (yystackp->yytops.yystates[0] == NULL) ++ yyFail (yystackp, NULL); + } + + #define YYCHK1(YYE) \ +@@ -9207,7 +9168,7 @@ + default: \ + goto yybuglab; \ + } \ +- } while (0) ++ } while (YYID (0)) + + + /*----------. +@@ -9218,17 +9179,13 @@ + yyparse (void) + { + int yyresult; +- yySymbol yytoken; + yyGLRStack yystack; ++ yyGLRStack* const yystackp = &yystack; + size_t yyposn; + +- +- YYSTYPE* const yylvalp = &yylval; +- YYLTYPE* const yyllocp = &yylloc; +- + YYDPRINTF ((stderr, "Starting parse\n")); + +- yytoken = YYEMPTY; ++ yychar = YYEMPTY; + yylval = yyval_default; + + #if YYLTYPE_IS_TRIVIAL +@@ -9237,7 +9194,7 @@ + #endif + + +- if (! yyinitGLRStack (&yystack, YYINITDEPTH)) ++ if (! yyinitGLRStack (yystackp, YYINITDEPTH)) + goto yyexhaustedlab; + switch (YYSETJMP (yystack.yyexception_buffer)) + { +@@ -9246,24 +9203,23 @@ + case 2: goto yyexhaustedlab; + default: goto yybuglab; + } +- yystack.yytokenp = &yytoken; +- yyglrShift (&yystack, 0, 0, 0, yylval, &yylloc); ++ yyglrShift (&yystack, 0, 0, 0, &yylval, &yylloc); + yyposn = 0; + +- while (yytrue) ++ while (YYID (yytrue)) + { + /* For efficiency, we have two loops, the first of which is + specialized to deterministic operation (single stack, no + potential ambiguity). */ + /* Standard mode */ +- while (yytrue) ++ while (YYID (yytrue)) + { + yyRuleNum yyrule; + int yyaction; + const short int* yyconflicts; + + yyStateNum yystate = yystack.yytops.yystates[0]->yylrState; +- YYDPRINTF ((stderr, "Entering state %d\n", yystate)); ++ YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + goto yyacceptlab; + if (yyisDefaultedState (yystate)) +@@ -9271,38 +9227,41 @@ + yyrule = yydefaultAction (yystate); + if (yyrule == 0) + { +- yystack.yyerror_range[1].yystate.yyloc = *yyllocp; +- yyreportSyntaxError (&yystack, yylvalp, yyllocp); ++ yystack.yyerror_range[1].yystate.yyloc = yylloc; ++ yyreportSyntaxError (&yystack); + goto yyuser_error; + } + YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue)); + } + else + { +- if (yytoken == YYEMPTY) ++ yySymbol yytoken; ++ if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + yytoken = YYTRANSLATE (yychar); +- YY_SYMBOL_PRINT ("Next token is", yytoken, yylvalp, yyllocp); ++ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } ++ else ++ yytoken = YYTRANSLATE (yychar); + yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); + if (*yyconflicts != 0) + break; + if (yyisShiftAction (yyaction)) + { +- YY_SYMBOL_PRINT ("Shifting", yytoken, yylvalp, yyllocp); +- if (yytoken != YYEOF) +- yytoken = YYEMPTY; ++ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); ++ if (yychar != YYEOF) ++ yychar = YYEMPTY; + yyposn += 1; +- yyglrShift (&yystack, 0, yyaction, yyposn, yylval, yyllocp); ++ yyglrShift (&yystack, 0, yyaction, yyposn, &yylval, &yylloc); + if (0 < yystack.yyerrState) + yystack.yyerrState -= 1; + } + else if (yyisErrorAction (yyaction)) + { +- yystack.yyerror_range[1].yystate.yyloc = *yyllocp; +- yyreportSyntaxError (&yystack, yylvalp, yyllocp); ++ yystack.yyerror_range[1].yystate.yyloc = yylloc; ++ yyreportSyntaxError (&yystack); + goto yyuser_error; + } + else +@@ -9310,15 +9269,35 @@ + } + } + +- while (yytrue) ++ while (YYID (yytrue)) + { ++ yySymbol yytoken_to_shift; + size_t yys; +- size_t yyn = yystack.yytops.yysize; +- for (yys = 0; yys < yyn; yys += 1) +- YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn, +- yylvalp, yyllocp)); +- yytoken = YYEMPTY; +- yyposn += 1; ++ ++ for (yys = 0; yys < yystack.yytops.yysize; yys += 1) ++ yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY; ++ ++ /* yyprocessOneStack returns one of three things: ++ ++ - An error flag. If the caller is yyprocessOneStack, it ++ immediately returns as well. When the caller is finally ++ yyparse, it jumps to an error label via YYCHK1. ++ ++ - yyok, but yyprocessOneStack has invoked yymarkStackDeleted ++ (&yystack, yys), which sets the top state of yys to NULL. Thus, ++ yyparse's following invocation of yyremoveDeletes will remove ++ the stack. ++ ++ - yyok, when ready to shift a token. ++ ++ Except in the first case, yyparse will invoke yyremoveDeletes and ++ then shift the next token onto all remaining stacks. This ++ synchronization of the shift (that is, after all preceding ++ reductions on all stacks) helps prevent double destructor calls ++ on yylval in the event of memory exhaustion. */ ++ ++ for (yys = 0; yys < yystack.yytops.yysize; yys += 1) ++ YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn)); + yyremoveDeletes (&yystack); + if (yystack.yytops.yysize == 0) + { +@@ -9327,11 +9306,37 @@ + yyFail (&yystack, YY_("syntax error")); + YYCHK1 (yyresolveStack (&yystack)); + YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); +- yystack.yyerror_range[1].yystate.yyloc = *yyllocp; +- yyreportSyntaxError (&yystack, yylvalp, yyllocp); ++ yystack.yyerror_range[1].yystate.yyloc = yylloc; ++ yyreportSyntaxError (&yystack); + goto yyuser_error; + } +- else if (yystack.yytops.yysize == 1) ++ ++ /* If any yyglrShift call fails, it will fail after shifting. Thus, ++ a copy of yylval will already be on stack 0 in the event of a ++ failure in the following loop. Thus, yychar is set to YYEMPTY ++ before the loop to make sure the user destructor for yylval isn't ++ called twice. */ ++ yytoken_to_shift = YYTRANSLATE (yychar); ++ yychar = YYEMPTY; ++ yyposn += 1; ++ for (yys = 0; yys < yystack.yytops.yysize; yys += 1) ++ { ++ int yyaction; ++ const short int* yyconflicts; ++ yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState; ++ yygetLRActions (yystate, yytoken_to_shift, &yyaction, ++ &yyconflicts); ++ /* Note that yyconflicts were handled by yyprocessOneStack. */ ++ YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys)); ++ YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc); ++ yyglrShift (&yystack, yys, yyaction, yyposn, ++ &yylval, &yylloc); ++ YYDPRINTF ((stderr, "Stack %lu now in state #%d\n", ++ (unsigned long int) yys, ++ yystack.yytops.yystates[yys]->yylrState)); ++ } ++ ++ if (yystack.yytops.yysize == 1) + { + YYCHK1 (yyresolveStack (&yystack)); + YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); +@@ -9341,7 +9346,7 @@ + } + continue; + yyuser_error: +- yyrecoverSyntaxError (&yystack, yylvalp, yyllocp); ++ yyrecoverSyntaxError (&yystack); + yyposn = yystack.yytops.yystates[0]->yyposn; + } + +@@ -9351,7 +9356,7 @@ + + yybuglab: + YYASSERT (yyfalse); +- /* Fall through. */ ++ goto yyabortlab; + + yyabortlab: + yyresult = 1; +@@ -9360,12 +9365,13 @@ + yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; +- /* Fall through. */ ++ goto yyreturn; + + yyreturn: +- if (yytoken != YYEOF && yytoken != YYEMPTY) ++ if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", +- yytoken, yylvalp, yyllocp); ++ YYTRANSLATE (yychar), ++ &yylval, &yylloc); + + /* If the stack is well-formed, pop the stack until it is empty, + destroying its entries as we go. But free the stack regardless +@@ -9374,26 +9380,36 @@ + { + yyGLRState** yystates = yystack.yytops.yystates; + if (yystates) +- while (yystates[0]) +- { +- yyGLRState *yys = yystates[0]; +- yystack.yyerror_range[1].yystate.yyloc = yys->yyloc; +- yydestroyGLRState ("Cleanup: popping", yys); +- yystates[0] = yys->yypred; +- yystack.yynextFree -= 1; +- yystack.yyspaceLeft += 1; +- } ++ { ++ size_t yysize = yystack.yytops.yysize; ++ size_t yyk; ++ for (yyk = 0; yyk < yysize; yyk += 1) ++ if (yystates[yyk]) ++ { ++ while (yystates[yyk]) ++ { ++ yyGLRState *yys = yystates[yyk]; ++ yystack.yyerror_range[1].yystate.yyloc = yys->yyloc; ++ yydestroyGLRState ("Cleanup: popping", yys); ++ yystates[yyk] = yys->yypred; ++ yystack.yynextFree -= 1; ++ yystack.yyspaceLeft += 1; ++ } ++ break; ++ } ++ } + yyfreeGLRStack (&yystack); + } + +- return yyresult; ++ /* Make sure YYID is used. */ ++ return YYID (yyresult); + } + + /* DEBUGGING ONLY */ + #ifdef YYDEBUG +-static void yypstack (yyGLRStack* yystack, size_t yyk) ++static void yypstack (yyGLRStack* yystackp, size_t yyk) + __attribute__ ((__unused__)); +-static void yypdumpstack (yyGLRStack* yystack) __attribute__ ((__unused__)); ++static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__)); + + static void + yy_yypstack (yyGLRState* yys) +@@ -9417,23 +9433,23 @@ + } + + static void +-yypstack (yyGLRStack* yystack, size_t yyk) ++yypstack (yyGLRStack* yystackp, size_t yyk) + { +- yypstates (yystack->yytops.yystates[yyk]); ++ yypstates (yystackp->yytops.yystates[yyk]); + } + + #define YYINDEX(YYX) \ +- ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems) ++ ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems) + + + static void +-yypdumpstack (yyGLRStack* yystack) ++yypdumpstack (yyGLRStack* yystackp) + { + yyGLRStackItem* yyp; + size_t yyi; +- for (yyp = yystack->yyitems; yyp < yystack->yynextFree; yyp += 1) ++ for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1) + { +- fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystack->yyitems)); ++ fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystackp->yyitems)); + if (*(yybool *) yyp) + { + fprintf (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld", +@@ -9447,22 +9463,22 @@ + else + { + fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld", +- yyp->yyoption.yyrule, ++ yyp->yyoption.yyrule - 1, + (long int) YYINDEX (yyp->yyoption.yystate), + (long int) YYINDEX (yyp->yyoption.yynext)); + } + fprintf (stderr, "\n"); + } + fprintf (stderr, "Tops:"); +- for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1) ++ for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1) + fprintf (stderr, "%lu: %ld; ", (unsigned long int) yyi, +- (long int) YYINDEX (yystack->yytops.yystates[yyi])); ++ (long int) YYINDEX (yystackp->yytops.yystates[yyi])); + fprintf (stderr, "\n"); + } + #endif + + +-#line 2409 "parse.y" ++#line 2411 "parse.y" + + + /* Check the order of declarations for various standards */ +@@ -9544,7 +9560,7 @@ + #if YYDEBUG != 0 + yydebug = value; + #else +- warning ("YYDEBUG not defined."); ++ gpc_warning ("YYDEBUG not defined."); + #endif + } + +diff -urN gpc-20060325/p/parse.h gpc-20070904/p/parse.h +--- gpc-20060325/p/parse.h 2006-03-24 02:52:27.000000000 +0100 ++++ gpc-20070904/p/parse.h 2007-09-04 08:22:55.000000000 +0200 +@@ -1,7 +1,8 @@ +-/* A Bison parser, made by GNU Bison 2.1. */ ++/* A Bison parser, made by GNU Bison 2.3. */ + +-/* Skeleton parser for GLR parsing with Bison, +- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ++/* Skeleton interface for Bison GLR parsers in C ++ ++ Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -18,6 +19,19 @@ + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + ++/* As a special exception, you may create a larger work that contains ++ part or all of the Bison parser skeleton and distribute that work ++ under terms of your choice, so long as that work isn't itself a ++ parser generator using the skeleton or a modified version thereof ++ as a parser skeleton. Alternatively, if you modify or redistribute ++ the parser skeleton itself, you may (at your option) remove this ++ special exception, which will cause the skeleton and the resulting ++ Bison output files to be licensed under the GNU General Public ++ License without this special exception. ++ ++ This special exception was added by the Free Software Foundation in ++ version 2.2 of Bison. */ ++ + /* Tokens. */ + #ifndef YYTOKENTYPE + # define YYTOKENTYPE +@@ -143,144 +157,34 @@ + LEX_FLOOR_DIV = 374 + }; + #endif +-/* Tokens. */ +-#define prec_lower_than_error 258 +-#define prec_if 259 +-#define prec_import 260 +-#define p_uses 261 +-#define p_else 262 +-#define p_and 263 +-#define p_array 264 +-#define p_begin 265 +-#define p_case 266 +-#define p_div 267 +-#define p_do 268 +-#define p_downto 269 +-#define p_end 270 +-#define p_file 271 +-#define p_for 272 +-#define p_function 273 +-#define p_goto 274 +-#define p_if 275 +-#define p_in 276 +-#define p_label 277 +-#define p_mod 278 +-#define p_nil 279 +-#define p_not 280 +-#define p_of 281 +-#define p_or 282 +-#define p_packed 283 +-#define p_procedure 284 +-#define p_to 285 +-#define p_program 286 +-#define p_record 287 +-#define p_repeat 288 +-#define p_set 289 +-#define p_then 290 +-#define p_type 291 +-#define p_until 292 +-#define p_var 293 +-#define p_while 294 +-#define p_with 295 +-#define p_absolute 296 +-#define p_abstract 297 +-#define p_and_then 298 +-#define p_as 299 +-#define p_asm 300 +-#define p_attribute 301 +-#define p_bindable 302 +-#define p_const 303 +-#define p_constructor 304 +-#define p_destructor 305 +-#define p_external 306 +-#define p_far 307 +-#define p_finalization 308 +-#define p_forward 309 +-#define p_implementation 310 +-#define p_import 311 +-#define p_inherited 312 +-#define p_initialization 313 +-#define p_is 314 +-#define p_near 315 +-#define p_object 316 +-#define p_only 317 +-#define p_operator 318 +-#define p_otherwise 319 +-#define p_or_else 320 +-#define p_pow 321 +-#define p_qualified 322 +-#define p_restricted 323 +-#define p_shl 324 +-#define p_shr 325 +-#define p_unit 326 +-#define p_value 327 +-#define p_virtual 328 +-#define p_xor 329 +-#define p_asmname 330 +-#define p_c 331 +-#define p_c_language 332 +-#define p_class 333 +-#define p_override 334 +-#define p_reintroduce 335 +-#define p_view 336 +-#define p_Addr 337 +-#define p_Assigned 338 +-#define p_Dispose 339 +-#define p_Exit 340 +-#define p_FormatString 341 +-#define p_New 342 +-#define p_Return 343 +-#define p_StringOf 344 +-#define LEX_INTCONST 345 +-#define LEX_INTCONST_BASE 346 +-#define LEX_STRCONST 347 +-#define LEX_REALCONST 348 +-#define LEX_BUILTIN_PROCEDURE 349 +-#define LEX_BUILTIN_PROCEDURE_WRITE 350 +-#define LEX_BUILTIN_FUNCTION 351 +-#define LEX_ID 352 +-#define LEX_CARET_WHITE 353 +-#define LEX_CARET_LETTER 354 +-#define LEX_ASSIGN 355 +-#define LEX_RENAME 356 +-#define LEX_RANGE 357 +-#define LEX_ELLIPSIS 358 +-#define LEX_CONST_EQUAL 359 +-#define LEX_SYMDIFF 360 +-#define LEX_NE 361 +-#define LEX_GE 362 +-#define LEX_LE 363 +-#define LEX_POWER 364 +-#define LEX_BPPLUS 365 +-#define LEX_BPMINUS 366 +-#define LEX_CEIL_PLUS 367 +-#define LEX_CEIL_MINUS 368 +-#define LEX_FLOOR_PLUS 369 +-#define LEX_FLOOR_MINUS 370 +-#define LEX_CEIL_MULT 371 +-#define LEX_CEIL_DIV 372 +-#define LEX_FLOOR_MULT 373 +-#define LEX_FLOOR_DIV 374 +- +- +- +- +-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +-#line 112 "parse.y" +-typedef union YYSTYPE { ++ ++ ++/* Copy the first part of user declarations. */ ++#line 63 "parse.y" ++ ++#define YYMAXDEPTH 200000 ++#include "gpc.h" ++#ifdef GCC_4_0 ++#include "cgraph.h" ++#endif ++ ++ ++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED ++typedef union YYSTYPE ++#line 80 "parse.y" ++{ + enum tree_code code; + long itype; + tree ttype; +-} YYSTYPE; +-/* Line 2359 of glr.c. */ +-#line 277 "parse.h" ++} ++/* Line 2616 of glr.c. */ ++#line 182 "parse.h" ++ YYSTYPE; + # define YYSTYPE_IS_DECLARED 1 + # define YYSTYPE_IS_TRIVIAL 1 + #endif + +-extern YYSTYPE yylval; +- +-#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) ++#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED + typedef struct YYLTYPE + { + +@@ -294,6 +198,9 @@ + # define YYLTYPE_IS_TRIVIAL 1 + #endif + ++ ++extern YYSTYPE yylval; ++ + extern YYLTYPE yylloc; + + +diff -urN gpc-20060325/p/parse.y gpc-20070904/p/parse.y +--- gpc-20060325/p/parse.y 2006-03-24 02:47:15.000000000 +0100 ++++ gpc-20070904/p/parse.y 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 1, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -66,38 +66,6 @@ + #ifdef GCC_4_0 + #include "cgraph.h" + #endif +- +-/* A few keywords of some dialects can be parsed as regular identifiers +- and checked from the parser actions => fewer special tokens. */ +-#define ASSERT_ID(id, location, pseudo_keyword) \ +- do if (!IDENTIFIER_IS_BUILT_IN (id, pseudo_keyword) || !PD_ACTIVE (IDENTIFIER_BUILT_IN_VALUE (id))) \ +- { yyerror_id (id, &location); YYERROR; } while (0) +- +-enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; +-static int check_decl_order (int, int); +- +-extern int main_yyparse (void); +-#define yyparse main_yyparse +- +-union yyGLRStackItem; +-static void locations (YYLTYPE *, const union yyGLRStackItem *, int); +-#define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) +-#ifndef GCC_3_4 +-#define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) +-#else +-#define LOCATION_NOTE(LOC) if (current_function_decl) \ +- { \ +- location_t loc_aux; \ +- loc_aux.file = (LOC).first_file; \ +- loc_aux.line = (LOC).first_line; \ +- emit_line_note (loc_aux); \ +- } +-#endif +-#define COPYLOC(D, S) /* @@ ? (* (YYLTYPE *) memcpy (&(D), &(S), sizeof (YYLTYPE))) */ (S) +- +-#define YYASSERT gcc_assert +-#define YYMALLOC (void *) xmalloc +-#define YYREALLOC (void *) xrealloc + %} + + %debug +@@ -106,7 +74,7 @@ + %glr-parser + %no-default-prec + %expect 62 +-%expect-rr 24 ++%expect-rr 25 + + /* The semantic values */ + %union { +@@ -207,6 +175,40 @@ + rest_of_variant new_pointer_type conformant_array enumerated_type id_list1 err + optional_rename attrib id_list id optional_formal_parameter_list0 + ++%{ ++/* A few keywords of some dialects can be parsed as regular identifiers ++ and checked from the parser actions => fewer special tokens. */ ++#define ASSERT_ID(id, location, pseudo_keyword) \ ++ do if (!IDENTIFIER_IS_BUILT_IN (id, pseudo_keyword) || !PD_ACTIVE (IDENTIFIER_BUILT_IN_VALUE (id))) \ ++ { yyerror_id (id, &location); YYERROR; } while (0) ++ ++enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; ++static int check_decl_order (int, int); ++ ++extern int main_yyparse (void); ++#define yyparse main_yyparse ++ ++union yyGLRStackItem; ++static void locations (YYLTYPE *, const union yyGLRStackItem *, int); ++#define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) ++#ifndef GCC_3_4 ++#define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) ++#else ++#define LOCATION_NOTE(LOC) if (current_function_decl) \ ++ { \ ++ location_t loc_aux; \ ++ loc_aux.file = (LOC).first_file; \ ++ loc_aux.line = (LOC).first_line; \ ++ emit_line_note (loc_aux); \ ++ } ++#endif ++#define COPYLOC(D, S) /* @@ ? (* (YYLTYPE *) memcpy (&(D), &(S), sizeof (YYLTYPE))) */ (S) ++ ++#define YYASSERT gcc_assert ++#define YYMALLOC (void *) xmalloc ++#define YYREALLOC (void *) xrealloc ++%} ++ + %% + + /* Main program, module and unit structure */ +@@ -375,7 +377,7 @@ + | error + { error ("module specifications need an export part"); } + | export_part_list error export_part +- { warning ("missing semicolon"); yyerrok; } ++ { gpc_warning ("missing semicolon"); yyerrok; } + | export_part_list ';' error + { error ("extra semicolon"); } + ; +@@ -433,7 +435,7 @@ + import_specification + | import_specification_list ';' import_specification + | import_specification_list error import_specification +- { warning ("missing semicolon"); yyerrok; } ++ { gpc_warning ("missing semicolon"); yyerrok; } + ; + + import_specification: +@@ -545,7 +547,7 @@ + uses_specification + | uses_list ',' uses_specification + | uses_list error uses_specification +- { warning ("missing comma"); yyerrok; } ++ { gpc_warning ("missing comma"); yyerrok; } + ; + + uses_specification: +@@ -786,7 +788,7 @@ + tree t = build_pascal_pointer_type (make_node (LANG_TYPE)); + PASCAL_TYPE_CLASS (t) = 1; + build_type_decl ($1, t, NULL_TREE); +- warning("ignored parent in Delphi forward class declaration"); ++ gpc_warning ("ignored parent in Delphi forward class declaration"); + } + | new_identifier enable_lce equals p_class LEX_RANGE p_end + { +@@ -1527,7 +1529,7 @@ + pushlevel optional_statement poplevel + { + if (!$5 && extra_warnings) +- warning ("empty statement after `else'"); ++ gpc_warning ("empty statement after `else'"); + expand_end_cond (); + } + | p_case expression p_of +@@ -1607,7 +1609,7 @@ + pushlevel optional_statement poplevel + { + if (!$6 && extra_warnings) +- warning ("empty statement after `then'"); ++ gpc_warning ("empty statement after `then'"); + } + ; + +@@ -2393,7 +2395,7 @@ + dot_or_error: + '.' + | error +- { warning ("missing `.' at the end of program/unit/module"); } ++ { gpc_warning ("missing `.' at the end of program/unit/module"); } + ; + + null: +@@ -2487,7 +2489,7 @@ + #if YYDEBUG != 0 + yydebug = value; + #else +- warning ("YYDEBUG not defined."); ++ gpc_warning ("YYDEBUG not defined."); + #endif + } + +diff -urN gpc-20060325/p/pascal-lex.c gpc-20070904/p/pascal-lex.c +--- gpc-20060325/p/pascal-lex.c 2006-02-18 14:37:24.000000000 +0100 ++++ gpc-20070904/p/pascal-lex.c 2007-09-04 08:22:55.000000000 +0200 +@@ -535,7 +535,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 1, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/pascal-lex.l gpc-20070904/p/pascal-lex.l +--- gpc-20060325/p/pascal-lex.l 2006-02-18 14:22:58.000000000 +0100 ++++ gpc-20070904/p/pascal-lex.l 2007-09-04 08:22:53.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 1, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/plant.c gpc-20070904/p/plant.c +--- gpc-20060325/p/plant.c 2006-03-24 00:51:09.000000000 +0100 ++++ gpc-20070904/p/plant.c 2007-09-04 08:22:53.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -98,15 +98,19 @@ + } + + void +-plant_asm (tree string, int vol) ++plant_nop (void) + { +- gcc_assert (0); ++ // gcc_assert (0); + } + + void +-plant_nop (void) ++plant_asm (tree string, int vol) + { +- // gcc_assert (0); ++ tree ae = build (ASM_EXPR, void_type_node, string, ++ NULL_TREE, NULL_TREE, NULL_TREE); ++ ASM_INPUT_P (ae) = 1; ++ ASM_VOLATILE_P (ae) = vol; ++ plant_expr_stmt (ae); + } + + void +@@ -115,6 +119,7 @@ + { + // gcc_assert (0); + tree ae = build (ASM_EXPR, void_type_node, string, outputs, inputs, clobbers); ++ ASM_VOLATILE_P (ae) = vol; + plant_expr_stmt (ae); + } + +@@ -146,14 +151,17 @@ + VARRAY_PUSH_TREE_PTR (gimplified_size_addrs, exp); + } + ++#if 0 + extern void (*lang_remember_gimplified_type)(tree); + extern void (*lang_remember_gimplified_sizepos)(tree *); ++#endif + + static void + pascal_gimplify_function (tree fndecl) + { + struct cgraph_node *cgn; + static long gimplifying = 0; ++#if 0 + if (!gimplifying) + { + VARRAY_TREE_INIT (gimplified_types, 32, "gimplified_types"); +@@ -163,6 +171,7 @@ + lang_remember_gimplified_type = pascal_remember_gimplified_type; + lang_remember_gimplified_sizepos = pascal_remember_gimplified_sizepos; + } ++#endif + gimplifying ++; + dump_function (TDI_original, fndecl); + gimplify_function_tree (fndecl); +@@ -285,7 +294,8 @@ + current_function_decl = DECL_CONTEXT (the_fun); + cfun = NULL; + +- if (!DECL_CONTEXT (the_fun) || PASCAL_METHOD (the_fun)) ++ if (!DECL_CONTEXT (the_fun) ++ || TREE_CODE (DECL_CONTEXT (the_fun)) != FUNCTION_DECL) + { + // current_function_decl = NULL_TREE; + current_function_decl = the_fun; +@@ -615,7 +625,9 @@ + while (loop && loop->code != LOOP_EXPR) + loop = loop->next; + } +- gcc_assert (loop && loop->code == LOOP_EXPR); ++ /* gcc_assert (loop && loop->code == LOOP_EXPR); */ ++ if (!(loop && loop->code == LOOP_EXPR)) ++ return 0; + if (!loop->arg0) + loop->arg0 = build1 (LABEL_EXPR, void_type_node, NULL_TREE); + gcc_assert (TREE_CODE (loop->arg0) == LABEL_EXPR); +@@ -638,7 +650,9 @@ + while (loop && loop->code != LOOP_EXPR) + loop = loop->next; + } +- gcc_assert (loop && loop->code == LOOP_EXPR); ++ /* gcc_assert (loop && loop->code == LOOP_EXPR); */ ++ if (!(loop && loop->code == LOOP_EXPR)) ++ return 0; + exit_st = build1 (EXIT_EXPR, void_type_node, boolean_true_node); + plant_expr_stmt (exit_st); + return 1; +diff -urN gpc-20060325/p/plant.h gpc-20070904/p/plant.h +--- gpc-20060325/p/plant.h 2006-03-03 03:36:35.000000000 +0100 ++++ gpc-20070904/p/plant.h 2007-09-04 08:22:53.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/predef.c gpc-20070904/p/predef.c +--- gpc-20060325/p/predef.c 2006-03-24 02:47:15.000000000 +0100 ++++ gpc-20070904/p/predef.c 2007-09-04 08:22:53.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -94,6 +94,7 @@ + static tree int_range_type (tree, int); + static int direct_access_warning (tree); + static tree get_read_flags (int); ++static unsigned HOST_WIDE_INT get_string_length_plus_1 (tree, int); + static tree actual_set_parameters (tree, int); + static tree build_read (int, tree, const char *); + static tree string_par (tree *); +@@ -464,6 +465,28 @@ + return build_int_2 (flags, 0); + } + ++/* Return the string length (modulo padding) + 1 if known, 0 otherwise. (We need an unsigned type here.) */ ++static unsigned HOST_WIDE_INT ++get_string_length_plus_1 (tree string, int nopad) ++{ ++ unsigned HOST_WIDE_INT l; ++ const char *p; ++ tree t = PASCAL_STRING_LENGTH (string); ++ if (TREE_CODE (t) != INTEGER_CST) ++ return 0; ++ l = TREE_INT_CST_LOW (t); ++ if (nopad) ++ return l + 1; ++ if (TREE_CODE (string) == INTEGER_CST && TREE_CODE (TREE_TYPE (string)) == CHAR_TYPE) ++ return TREE_INT_CST_LOW (string) == ' ' ? 1 : 2; ++ if (TREE_CODE (string) != STRING_CST) ++ return 0; ++ p = TREE_STRING_POINTER (string); ++ while (l > 0 && p[l - 1] == ' ') ++ l--; ++ return l + 1; ++} ++ + /* Make sure that a string can be accessed multiple times (usually for the + length and contents). Note that the string does not need to be an lvalue. + (note `function: PString' vs. `function: String') */ +@@ -1185,7 +1208,15 @@ + case 't': if (TYPE_MAIN_VARIANT (type) != gpc_type_TimeStamp) errstr = "argument %d to `%s' must be of type `TimeStamp'"; break; + case 'a': if (TYPE_MAIN_VARIANT (type) != gpc_type_BindingType) errstr = "argument %d to `%s' must be of type `BindingType'"; break; + case 'x': break; /* Untyped parameter */ +- case '#': if (TREE_CONSTANT (val) && (TREE_CODE (val) != CONSTRUCTOR || type == empty_set_type_node)) { error ("`%s' applied to a constant", r_name); return error_mark_node; } break; /* expression or type allowed */ ++ case '#': if (TREE_CONSTANT (val) ++ && ((TREE_CODE (val) != CONSTRUCTOR ++ && TREE_CODE (val) != PASCAL_SET_CONSTRUCTOR) ++ || type == empty_set_type_node)) ++ { ++ error ("`%s' applied to a constant", r_name); ++ return error_mark_node; ++ } ++ break; /* expression or type allowed */ + default: gcc_unreachable (); + } + if (ISUPPER ((unsigned char) argtype)) +@@ -1234,7 +1265,9 @@ + r_name = predef_table[i].idname; + if (!r_name) r_name = predef_table[i].alias_name; + gcc_assert (r_name); ++#if 0 + chk_dialect_name (r_name, predef_table[i].dialect); ++#endif + + if (r_num == p_Exit && apar) + { +@@ -1552,11 +1585,12 @@ + return NULL_TREE; + + case p_Card: +- if (TREE_CODE (val) == CONSTRUCTOR && PASCAL_CONSTRUCTOR_INT_CST (val)) ++ if (TREE_CODE (val) == PASCAL_SET_CONSTRUCTOR ++ && PASCAL_CONSTRUCTOR_INT_CST (val)) + { + tree e; + retval = integer_zero_node; +- for (e = CONSTRUCTOR_ELTS (val); e; e = TREE_CHAIN (e)) ++ for (e = SET_CONSTRUCTOR_ELTS (val); e; e = TREE_CHAIN (e)) + { + tree l = TREE_PURPOSE (e), u = TREE_VALUE (e); + gcc_assert (TREE_CODE (l) == INTEGER_CST && TREE_CODE (u) == INTEGER_CST); +@@ -1568,7 +1602,8 @@ + gcc_assert (TREE_CODE (retval) == INTEGER_CST); + break; + } +- if (TREE_CODE (val) == CONSTRUCTOR && TREE_CODE (TREE_TYPE (val)) == SET_TYPE) ++ if (TREE_CODE (val) == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (TREE_TYPE (val)) == SET_TYPE) + { + val = construct_set (val, NULL_TREE, 1); + CHK_EM (val); +@@ -1590,7 +1625,7 @@ + if (co->pascal_dialect & C_E_O_PASCAL) + error ("argument to `%s' must be of real type", r_name); + else +- warning ("`%s' applied to integers has no effect", r_name); ++ gpc_warning ("`%s' applied to integers has no effect", r_name); + retval = val; + } + else +@@ -1667,7 +1702,7 @@ + { + tree arg; + if (argcount == 1) +- warning ("`%s' with only one argument has no effect", r_name); ++ gpc_warning ("`%s' with only one argument has no effect", r_name); + for (arg = apar; arg; arg = TREE_CHAIN (arg)) + if (!is_string_compatible_type (TREE_VALUE (arg), 1)) + errstr = "arguments to `%s' must be strings or chars"; +@@ -1706,7 +1741,7 @@ + case p_Ord: + if (code == INTEGER_TYPE) + { +- warning ("`%s' applied to integers has no effect", r_name); ++ gpc_warning ("`%s' applied to integers has no effect", r_name); + retval = val; + } + else +@@ -1739,9 +1774,9 @@ + else if (pedantic && !contains_auto_initialized_part (type, r_num == p_Finalize)) + { + if (r_num == p_Finalize) +- warning ("variable does not need any finalization"); ++ gpc_warning ("variable does not need any finalization"); + else +- warning ("variable does not need any initialization"); ++ gpc_warning ("variable does not need any initialization"); + } + init_any (val, r_num == p_Finalize, 0); + retval = error_mark_node; /* nothing to expand anymore -- init_any does it already */ +@@ -1823,9 +1858,12 @@ + + /* (val = nil) ? 0 : strlen|Length (val) */ + if (TYPE_MAIN_VARIANT (type) == cstring_type_node) +- strlength = build (COND_EXPR, integer_type_node, +- build_pascal_binary_op (EQ_EXPR, val, null_pointer_node), integer_zero_node, +- build_routine_call (strlen_routine_node, build_tree_list (NULL_TREE, val))); ++ strlength = build (COND_EXPR, pascal_integer_type_node, ++ build_pascal_binary_op (EQ_EXPR, val, null_pointer_node), ++ convert (pascal_integer_type_node, integer_zero_node), ++ convert (pascal_integer_type_node, ++ build_routine_call (strlen_routine_node, ++ build_tree_list (NULL_TREE, val)))); + else + strlength = PASCAL_STRING_LENGTH (val); + retval = make_new_variable ("cstring2string", build_pascal_string_schema (save_expr (strlength))); +@@ -1860,7 +1898,7 @@ + case p_Conjugate: + if (INT_REAL (code)) + { +- warning ("`%s' applied to real numbers has no effect", r_name); ++ gpc_warning ("`%s' applied to real numbers has no effect", r_name); + retval = val; + } + else if (r_num == p_Re) +@@ -1872,9 +1910,9 @@ + case p_Im: + if (INT_REAL (code)) + { +- warning ("`%s' applied to real numbers always yields 0.", r_name); ++ gpc_warning ("`%s' applied to real numbers always yields 0.", r_name); + if (TREE_SIDE_EFFECTS (val)) +- warning (" Argument with side-effects is not evaluated."); ++ gpc_warning (" Argument with side-effects is not evaluated."); + retval = real_zero_node; + } + else +@@ -1923,7 +1961,8 @@ + } + + case p_Assigned: +- retval = build (NE_EXPR, boolean_type_node, val, integer_zero_node); ++ retval = build (NE_EXPR, boolean_type_node, val, ++ convert (TREE_TYPE (val), integer_zero_node)); + break; + + case p_GetMem: +@@ -1956,7 +1995,7 @@ + CHK_EM (ptype); + + if (TREE_CODE (ptype) == VOID_TYPE && !(co->pascal_dialect & B_D_PASCAL)) +- warning ("argument to `%s' should not be an untyped pointer", r_name); ++ gpc_warning ("argument to `%s' should not be an untyped pointer", r_name); + if (PASCAL_TYPE_ANYFILE (ptype)) + error ("`AnyFile' pointers cannot be allocated with `%s'", r_name); + +@@ -2064,8 +2103,12 @@ + int save_warn_object_assignment = co->warn_object_assignment; + co->warn_object_assignment = 0; + #endif ++ ++ + expand_expr_stmt (build_modify_expr (res_deref, NOP_EXPR, + build_pascal_initializer (TREE_TYPE (type), init, "type in `New'", 0))); ++ ++ + #if 0 + co->warn_object_assignment = save_warn_object_assignment; + #endif +@@ -2125,7 +2168,8 @@ + argcount = 1; + TREE_CHAIN (apar) = NULL_TREE; + } +- expand_start_cond (build (NE_EXPR, boolean_type_node, val, integer_zero_node), 0); ++ expand_start_cond (build (NE_EXPR, boolean_type_node, val, ++ convert (TREE_TYPE (val), integer_zero_node)), 0); + init_any (build_indirect_ref (val, NULL), 1, 1); + if (co->pascal_dialect & C_E_O_PASCAL) + { +@@ -2140,12 +2184,12 @@ + if (co->pascal_dialect & C_E_O_PASCAL) + error ("standard Pascal forbids `%s (nil)'", r_name); + else +- warning ("`%s (nil)' has no effect", r_name); ++ gpc_warning ("`%s (nil)' has no effect", r_name); + } + if (argcount > 1) + { + if (PEDANTIC (GNU_PASCAL)) +- warning (r_num == p_Dispose ++ gpc_warning (r_num == p_Dispose + ? "tag fields ignored in `%s'" + : "second parameter ignored in `%s'", r_name); + /* @@ Perhaps we should do a run-time check ? */ +@@ -2222,7 +2266,7 @@ + case p_Int: + if (code == INTEGER_TYPE) + { +- warning ("`%s' applied to integers has no effect", r_name); ++ gpc_warning ("`%s' applied to integers has no effect", r_name); + retval = val; + } + break; +@@ -2230,9 +2274,9 @@ + case p_Frac: + if (code == INTEGER_TYPE) + { +- warning ("`%s' applied to integers always yields 0.", r_name); ++ gpc_warning ("`%s' applied to integers always yields 0.", r_name); + if (TREE_SIDE_EFFECTS (val)) +- warning (" Argument with side-effects is not evaluated."); ++ gpc_warning (" Argument with side-effects is not evaluated."); + retval = integer_zero_node; + } + break; +@@ -2294,7 +2338,7 @@ + } + else if (co->pascal_dialect & U_B_D_M_PASCAL) + { +- warning ("unspecified buffer size for untyped file defaults to 128 in `%s'", r_name); ++ gpc_warning ("unspecified buffer size for untyped file defaults to 128 in `%s'", r_name); + buffer_size = build_int_2 (128, 0); + } + else +@@ -2498,7 +2542,7 @@ + if (argcount == 2) + apar = chainon (apar, build_tree_list (NULL_TREE, pascal_maxint_node)); + apar = tree_cons (NULL_TREE, convert (ptr_type_node, +- build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (val), 1)), ++ build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (val), 2)), + tree_cons (NULL_TREE, PASCAL_STRING_LENGTH (val), TREE_CHAIN (apar))); + apar = chainon (apar, tree_cons (NULL_TREE, actual_result, build_tree_list (NULL_TREE, + r_num == p_Copy ? integer_zero_node : argcount == 2 ? integer_one_node : build_int_2 (2, 0)))); +@@ -2544,7 +2588,7 @@ + errstr = "left argument of `pow' is 0 while right argument is <= 0"; + if (!pedantic && (co->pascal_dialect & C_E_O_PASCAL)) + { +- warning (errstr); ++ gpc_warning (errstr); + errstr = NULL; + } + } +@@ -2589,6 +2633,9 @@ + case '=': + case '<': + { ++ int nopad = r_num == p_EQ || r_num == p_LT; ++ const char *warning_str = NULL; ++ + if (swapargs) + { + TREE_VALUE (apar) = val2; +@@ -2596,7 +2643,19 @@ + val = TREE_VALUE (apar); + } + +- if (IS_STRING_CST (val) && IS_STRING_CST (val2)) ++ if (r_num == p_EQ || r_num == '=') ++ { ++ unsigned HOST_WIDE_INT l1 = get_string_length_plus_1 (val, nopad), l2 = get_string_length_plus_1 (val2, nopad); ++ tree c1 = PASCAL_TYPE_STRING (TREE_TYPE (val )) ? PASCAL_STRING_CAPACITY (val ) : PASCAL_STRING_LENGTH (val ); ++ tree c2 = PASCAL_TYPE_STRING (TREE_TYPE (val2)) ? PASCAL_STRING_CAPACITY (val2) : PASCAL_STRING_LENGTH (val2); ++ if (l1 > 0 && l2 > 0 && l1 != l2) ++ warning_str = "string comparison is always %s due to different length of fixed-size strings"; ++ else if ((l2 > 0 && TREE_CODE (c1) == INTEGER_CST && TREE_INT_CST_LOW (c1) < l2 - 1) || ++ (l1 > 0 && TREE_CODE (c2) == INTEGER_CST && TREE_INT_CST_LOW (c2) < l1 - 1)) ++ warning_str = "string comparison is always %s because the capacity of one string is smaller than the length of the fixed-size string"; ++ } ++ ++ if (!warning_str && IS_STRING_CST (val) && IS_STRING_CST (val2)) + { + const char *p1, *p2; + unsigned int l1, l2, r; +@@ -2639,7 +2698,7 @@ + } + + /* Optimize non-padding comparisons against the constant empty string */ +- if (r_num == p_EQ || r_num == p_LT) ++ if (!warning_str && nopad) + { + tree comp_empty = NULL; + if (IS_CONSTANT_EMPTY_STRING (val)) +@@ -2651,16 +2710,10 @@ + else if (IS_CONSTANT_EMPTY_STRING (val2)) + { + if (r_num == p_LT) /* s < '' is impossible */ +- { +- if (invert_result) +- warning ("`>=' comparison against the empty string is always `True'."); +- else +- warning ("`<' comparison against the empty string is always `False'."); +- if (TREE_SIDE_EFFECTS (val)) +- warning (" Operand with side-effects is not evaluated."); +- return invert_result ? boolean_true_node : boolean_false_node; +- } +- comp_empty = val; ++ warning_str = ++ "`>=' comparison against the empty string is always %s."; ++ else ++ comp_empty = val; + } + if (comp_empty) + { +@@ -2673,6 +2726,14 @@ + break; + } + } ++ ++ if (warning_str) ++ { ++ gpc_warning (warning_str, invert_result ? "true" : "false"); ++ if (TREE_SIDE_EFFECTS (val) || TREE_SIDE_EFFECTS (val2)) ++ gpc_warning (" Operand with side-effects is not evaluated."); ++ return invert_result ? boolean_true_node : boolean_false_node; ++ } + break; + } + +@@ -2996,7 +3057,7 @@ + get_standard_input (void) + { + if (co->warn_implicit_io) +- warning ("implicit use of `Input'"); ++ gpc_warning ("implicit use of `Input'"); + if (!current_module->input_available) + { + current_module->input_available = 1; +@@ -3009,7 +3070,7 @@ + get_standard_output (void) + { + if (co->warn_implicit_io) +- warning ("implicit use of `Output'"); ++ gpc_warning ("implicit use of `Output'"); + if (!current_module->output_available) + { + current_module->output_available = 1; +diff -urN gpc-20060325/p/predef.def gpc-20070904/p/predef.def +--- gpc-20060325/p/predef.def 2006-02-18 14:22:59.000000000 +0100 ++++ gpc-20070904/p/predef.def 2007-09-04 08:22:53.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -59,7 +59,7 @@ + PREDEF_KEYWORD (and_then, 1, E_O_PASCAL) /* short-circuit Boolean operator */ + PREDEF_KEYWORD (array, 0, ANY_PASCAL) /* array type declaration */ + PREDEF_KEYWORD (as, 1, O_D_M_PASCAL) /* object type membership test and conversion */ +-PREDEF_KEYWORD (asm, 1, B_D_PASCAL) /* GNU style inline assembler code */ ++PREDEF_KEYWORD (asm, 1, B_D_M_PASCAL) /* GNU style inline assembler code */ + PREDEF_KEYWORD (asmname, 1, GNU_PASCAL) /* DEPRECATED! linker name of routines and variables */ + PREDEF_KEYWORD (attribute, 1, GNU_PASCAL) /* attributes of routines and variables */ + PREDEF_KEYWORD (begin, 0, ANY_PASCAL) /* begin of a code block, part of a module constructor */ +diff -urN gpc-20060325/p/rts/Makefile.in gpc-20070904/p/rts/Makefile.in +--- gpc-20060325/p/rts/Makefile.in 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/Makefile.in 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -54,6 +54,11 @@ + GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor).$(rts_version) + GPCLIB=$(DESTDIR)/libgpc.a + GPCSOLIB=$(DESTDIR)/$(GPCSOLIBNAME) ++ifdef TARGET_MACHO ++ GPCSOLIBOPTIONS = -dynamiclib -dylib_install_name,$(GPCSOLIBNAME) ++else ++ GPCSOLIBOPTIONS = -shared -Wl,-soname=$(GPCSOLIBNAME) ++endif + PFLAGS1=--unit-path=$(VPATH) --automake + RTS_WARN=-W -Wall -Wmissing-prototypes -Wmissing-declarations + RTS_CFLAGS=-I. $(RTS_WARN) $(CFLAGS) $(RTSFLAGS)# -DDEBUG +@@ -189,7 +194,7 @@ + sharedlib.yes: $(GPCSOLIB) + $(GPCSOLIB): $(SO_OBJS) + -rm -f $(GPCSOLIB) +- $(CC) -shared -Wl,-soname=$(GPCSOLIBNAME) -fPIC -o $(GPCSOLIB) $(SO_OBJS) ++ $(CC) $(GPCSOLIBOPTIONS) -fPIC -o $(GPCSOLIB) $(SO_OBJS) + + mostlyclean: + -rm -f $(OBJS) $(SO_OBJS) *.gpi *.gpd core stamp-error-gpi +diff -urN gpc-20060325/p/rts/configure.in gpc-20070904/p/rts/configure.in +--- gpc-20060325/p/rts/configure.in 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/configure.in 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2 of the License, or ++# the Free Software Foundation; either version 3 of the License, or + # (at your option) any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/rts/constants.def gpc-20070904/p/rts/constants.def +--- gpc-20060325/p/rts/constants.def 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/constants.def 2007-09-04 08:22:54.000000000 +0200 +@@ -13,7 +13,7 @@ + // + // GNU Pascal is free software; you can redistribute it and/or modify + // it under the terms of the GNU General Public License as published by +-// the Free Software Foundation; either version 2, or (at your option) ++// the Free Software Foundation; either version 3, or (at your option) + // any later version. + // + // GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/rts/endian.pas gpc-20070904/p/rts/endian.pas +--- gpc-20060325/p/rts/endian.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/endian.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/error.pas gpc-20070904/p/rts/error.pas +--- gpc-20060325/p/rts/error.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/error.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -103,11 +103,14 @@ + procedure GPC_RunError (n: Integer); attribute (noreturn, name = '_p_RunError'); + procedure StartTempIOError; attribute (name = '_p_StartTempIOError'); + function EndTempIOError: Integer; attribute (name = '_p_EndTempIOError'); +-procedure Finalize; attribute (name = '_p_finalize'); + function GPC_IOResult: Integer; attribute (inline, name = '_p_IOResult'); + procedure GPC_Halt (aExitCode: Integer); attribute (noreturn, name = '_p_Halt'); + {@endinternal} + ++{ Finalize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. } ++procedure GPC_Finalize; ++ attribute (name = '_p_finalize'); + function GetErrorMessage (n: Integer): CString; attribute (name = '_p_GetErrorMessage'); + procedure RuntimeError (n: Integer); attribute (noreturn, name = '_p_RuntimeError'); + procedure RuntimeErrorErrNo (n: Integer); attribute (noreturn, name = '_p_RuntimeErrorErrNo'); +@@ -842,7 +845,7 @@ + Done_Files + end; + +-procedure Finalize; ++procedure GPC_Finalize; + begin + SetReturnAddress (ReturnAddress (0)); + ErrorMessageString := ''; +diff -urN gpc-20060325/p/rts/files.pas gpc-20070904/p/rts/files.pas +--- gpc-20060325/p/rts/files.pas 2006-03-06 15:11:00.000000000 +0100 ++++ gpc-20070904/p/rts/files.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/fname.pas gpc-20070904/p/rts/fname.pas +--- gpc-20060325/p/rts/fname.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/fname.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -236,14 +236,14 @@ + otherwise returns an empty string. If aFileName already contains + an element of DirSeparators, returns Slash2OSDirSeparator + (aFileName) if it exists. } +-function FSearch (const aFileName, DirList: String): TString; attribute (name = '_p_FSearch'); ++function FSearch (const aFileName: String; const DirList: String): TString; attribute (name = '_p_FSearch'); + + { Like FSearch, but only find executable files. Under Dos, if not + found, the function tries appending '.com', '.exe', '.bat' and + `.cmd' (the last one only if $COMSPEC points to a `cmd.exe'), so + you don't have to specify these extensions in aFileName (and with + respect to portability, it might be preferable not to do so). } +-function FSearchExecutable (const aFileName, DirList: String) = Result: TString; attribute (name = '_p_FSearchExecutable'); ++function FSearchExecutable (const aFileName: String; const DirList: String) = Result: TString; attribute (name = '_p_FSearchExecutable'); + + { Replaces all occurrences of `$FOO' and `~' in s by the value of + the environment variables FOO or HOME, respectively. If a variable +@@ -281,7 +281,7 @@ + + { Splits a file name into directory, name and extension. Each of + Dir, BaseName and Ext may be Null. } +-procedure FSplit (const Path: String; var Dir, BaseName, Ext: String); attribute (name = '_p_FSplit'); ++procedure FSplit (const Path: String; var Dir: String; var BaseName: String; var Ext: String); attribute (name = '_p_FSplit'); + + { Functions that extract one or two of the parts from FSplit. + DirFromPath returns DirSelf + DirSeparator if the path contains no +@@ -310,7 +310,7 @@ + + { Returns the first occurence of SubString in s that is not quoted + at the beginning, or 0 if no such occurence exists. } +-function FindNonQuotedStr (const SubString, s: String; From: Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); ++function FindNonQuotedStr (const SubString: String; const s: String; From: Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); + + { Does a string contain non-quoted wildcard characters? } + function HasWildCards (const s: String): Boolean; attribute (name = '_p_HasWildCards'); +@@ -337,10 +337,10 @@ + procedure DisposePPStrings (Strings: PPStrings); attribute (name = '_p_DisposePPStrings'); + + { Tests if a file name matches a shell wildcard pattern (?, *, []) } +-function FileNameMatch (const Pattern, FileName: String): Boolean; attribute (name = '_p_FileNameMatch'); ++function FileNameMatch (const Pattern: String; const FileName: String): Boolean; attribute (name = '_p_FileNameMatch'); + + { FileNameMatch with BraceExpand } +-function MultiFileNameMatch (const Pattern, FileName: String): Boolean; attribute (name = '_p_MultiFileNameMatch'); ++function MultiFileNameMatch (const Pattern: String; const FileName: String): Boolean; attribute (name = '_p_MultiFileNameMatch'); + + { File name globbing } + { GlobInit is implied by Glob and MultiGlob, not by GlobOn and +@@ -458,7 +458,7 @@ + HOME is not. However, it is easy for users to set it if they want + their config files in a certain directory rather than with the + executables. } +-function ConfigFileName (const Prefix, BaseName: String; Global: Boolean): TString; attribute (name = '_p_ConfigFileName'); ++function ConfigFileName (const Prefix: String; const BaseName: String; Global: Boolean): TString; attribute (name = '_p_ConfigFileName'); + + { Returns a directory name suitable for global, machine-independent + data. The function garantees that the name returned ends with a +@@ -479,7 +479,7 @@ + + About the symbols used above, and the two possibilities under Dos, + see the comments for ConfigFileName. } +-function DataDirectoryName (const Prefix, BaseName: String): TString; attribute (name = '_p_DataDirectoryName'); ++function DataDirectoryName (const Prefix: String; const BaseName: String): TString; attribute (name = '_p_DataDirectoryName'); + + { Executes a command line. Reports execution errors via the IOResult + mechanism and returns the exit status of the executed program. +@@ -740,12 +740,12 @@ + Res := '' + end; + +-function FSearch (const aFileName, DirList: String): TString; ++function FSearch (const aFileName: String; const DirList: String): TString; + begin + FSearch := InternalFSearch (aFileName, DirList, False) + end; + +-function FSearchExecutable (const aFileName, DirList: String) = Result: TString; ++function FSearchExecutable (const aFileName: String; const DirList: String) = Result: TString; + begin + Result := InternalFSearch (aFileName, DirList, True); + {$ifdef __OS_DOS__} +@@ -903,7 +903,7 @@ + {$endif} + end; + +-procedure FSplit (const Path: String; var Dir, BaseName, Ext: String); ++procedure FSplit (const Path: String; var Dir: String; var BaseName: String; var Ext: String); + var + d, e: Integer; + p, t: TString; +@@ -976,7 +976,7 @@ + if i > Length (s) then FindNonQuotedChar := 0 else FindNonQuotedChar := i + end; + +-function FindNonQuotedStr (const SubString, s: String; From: Integer): Integer; ++function FindNonQuotedStr (const SubString: String; const s: String; From: Integer): Integer; + var i, n: Integer; + begin + i := From; +@@ -1185,7 +1185,7 @@ + FNMatch2 := zn > Length (FileName) + end; + +-function FileNameMatch (const Pattern, FileName: String): Boolean; ++function FileNameMatch (const Pattern: String; const FileName: String): Boolean; + begin + { DJGPP's fnmatch(), e.g., doesn't exclude dot files from `*...' patterns. } + if (FileName <> '') and (FileName[1] = '.') and (Pattern <> '') and (Pattern[1] in ['*', '?']) then +@@ -1200,7 +1200,7 @@ + {$endif} + end; + +-function MultiFileNameMatch (const Pattern, FileName: String): Boolean; ++function MultiFileNameMatch (const Pattern: String; const FileName: String): Boolean; + var + s: PPStrings; + i: Integer; +@@ -1463,7 +1463,7 @@ + end; + {$endif} + +-function ConfigFileName (const Prefix, BaseName: String; Global: Boolean): TString; ++function ConfigFileName (const Prefix: String; const BaseName: String; Global: Boolean): TString; + var PName: TString; + begin + {$ifdef __OS_DOS__} +@@ -1488,7 +1488,7 @@ + {$endif} + end; + +-function DataDirectoryName (const Prefix, BaseName: String): TString; ++function DataDirectoryName (const Prefix: String; const BaseName: String): TString; + var RealPrefix, PName: TString; + begin + RealPrefix := Prefix; +diff -urN gpc-20060325/p/rts/getopt.pas gpc-20070904/p/rts/getopt.pas +--- gpc-20060325/p/rts/getopt.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/getopt.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/gpc.pas gpc-20070904/p/rts/gpc.pas +--- gpc-20060325/p/rts/gpc.pas 2006-03-06 16:31:29.000000000 +0100 ++++ gpc-20070904/p/rts/gpc.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -39,7 +39,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -60,7 +60,7 @@ + General Public License. } + + {$gnu-pascal,I-} +-{$if __GPC_RELEASE__ <> 20060215} ++{$if __GPC_RELEASE__ <> 20070904} + {$error + Trying to compile gpc.pas with a non-matching GPC version is likely + to cause problems. +@@ -440,27 +440,27 @@ + function UpCaseStr (const s: String) = Result: TString; attribute (name = '_p_UpCaseStr'); external; + function LoCaseStr (const s: String) = Result: TString; attribute (name = '_p_LoCaseStr'); external; + +-function StrEqualCase (const s1, s2: String): Boolean; attribute (name = '_p_StrEqualCase'); external; ++function StrEqualCase (const s1: String; const s2: String): Boolean; attribute (name = '_p_StrEqualCase'); external; + +-function Pos (const SubString, s: String): Integer; attribute (name = '_p_Pos'); external; ++function Pos (const SubString: String; const s: String): Integer; attribute (name = '_p_Pos'); external; + function PosChar (const ch: Char; const s: String): Integer; attribute (name = '_p_PosChar'); external; +-function LastPos (const SubString, s: String): Integer; attribute (name = '_p_LastPos'); external; +-function PosCase (const SubString, s: String): Integer; attribute (name = '_p_PosCase'); external; +-function LastPosCase (const SubString, s: String): Integer; attribute (name = '_p_LastPosCase'); external; ++function LastPos (const SubString: String; const s: String): Integer; attribute (name = '_p_LastPos'); external; ++function PosCase (const SubString: String; const s: String): Integer; attribute (name = '_p_PosCase'); external; ++function LastPosCase (const SubString: String; const s: String): Integer; attribute (name = '_p_LastPosCase'); external; + function CharPos (const Chars: CharSet; const s: String): Integer; attribute (name = '_p_CharPos'); external; + function LastCharPos (const Chars: CharSet; const s: String): Integer; attribute (name = '_p_LastCharPos'); external; + +-function PosFrom (const SubString, s: String; From: Integer): Integer; attribute (name = '_p_PosFrom'); external; +-function LastPosTill (const SubString, s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTill'); external; +-function PosFromCase (const SubString, s: String; From: Integer): Integer; attribute (name = '_p_PosFromCase'); external; +-function LastPosTillCase (const SubString, s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); external; ++function PosFrom (const SubString: String; const s: String; From: Integer): Integer; attribute (name = '_p_PosFrom'); external; ++function LastPosTill (const SubString: String; const s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTill'); external; ++function PosFromCase (const SubString: String; const s: String; From: Integer): Integer; attribute (name = '_p_PosFromCase'); external; ++function LastPosTillCase (const SubString: String; const s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); external; + function CharPosFrom (const Chars: CharSet; const s: String; From: Integer): Integer; attribute (name = '_p_CharPosFrom'); external; + function LastCharPosTill (const Chars: CharSet; const s: String; Till: Integer): Integer; attribute (name = '_p_LastCharPosTill'); external; + +-function IsPrefix (const Prefix, s: String): Boolean; attribute (name = '_p_IsPrefix'); external; +-function IsSuffix (const Suffix, s: String): Boolean; attribute (name = '_p_IsSuffix'); external; +-function IsPrefixCase (const Prefix, s: String): Boolean; attribute (name = '_p_IsPrefixCase'); external; +-function IsSuffixCase (const Suffix, s: String): Boolean; attribute (name = '_p_IsSuffixCase'); external; ++function IsPrefix (const Prefix: String; const s: String): Boolean; attribute (name = '_p_IsPrefix'); external; ++function IsSuffix (const Suffix: String; const s: String): Boolean; attribute (name = '_p_IsSuffix'); external; ++function IsPrefixCase (const Prefix: String; const s: String): Boolean; attribute (name = '_p_IsPrefixCase'); external; ++function IsSuffixCase (const Suffix: String; const s: String): Boolean; attribute (name = '_p_IsSuffixCase'); external; + + function CStringLength (Src: CString): SizeType; attribute (inline, name = '_p_CStringLength'); external; + function CStringEnd (Src: CString): CString; attribute (inline, name = '_p_CStringEnd'); external; +@@ -566,7 +566,7 @@ + + { Sets an environment variable with the name given in VarName to the + value Value. A previous value, if any, is overwritten. } +-procedure SetEnv (const VarName, Value: String); attribute (name = '_p_SetEnv'); external; ++procedure SetEnv (const VarName: String; const Value: String); attribute (name = '_p_SetEnv'); external; + + { Un-sets an environment variable with the name given in VarName. } + procedure UnSetEnv (const VarName: String); attribute (name = '_p_UnSetEnv'); external; +@@ -634,6 +634,10 @@ + RTSErrorFD: Integer; attribute (name = '_p_ErrorFD'); external; + RTSErrorFileName: PString; attribute (name = '_p_ErrorFileName'); external; + ++{ Finalize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. } ++procedure GPC_Finalize; ++ attribute (name = '_p_finalize'); external; + function GetErrorMessage (n: Integer): CString; attribute (name = '_p_GetErrorMessage'); external; + procedure RuntimeError (n: Integer); attribute (noreturn, name = '_p_RuntimeError'); external; + procedure RuntimeErrorErrNo (n: Integer); attribute (noreturn, name = '_p_RuntimeErrorErrNo'); external; +@@ -1229,14 +1233,14 @@ + otherwise returns an empty string. If aFileName already contains + an element of DirSeparators, returns Slash2OSDirSeparator + (aFileName) if it exists. } +-function FSearch (const aFileName, DirList: String): TString; attribute (name = '_p_FSearch'); external; ++function FSearch (const aFileName: String; const DirList: String): TString; attribute (name = '_p_FSearch'); external; + + { Like FSearch, but only find executable files. Under Dos, if not + found, the function tries appending '.com', '.exe', '.bat' and + `.cmd' (the last one only if $COMSPEC points to a `cmd.exe'), so + you don't have to specify these extensions in aFileName (and with + respect to portability, it might be preferable not to do so). } +-function FSearchExecutable (const aFileName, DirList: String) = Result: TString; attribute (name = '_p_FSearchExecutable'); external; ++function FSearchExecutable (const aFileName: String; const DirList: String) = Result: TString; attribute (name = '_p_FSearchExecutable'); external; + + { Replaces all occurrences of `$FOO' and `~' in s by the value of + the environment variables FOO or HOME, respectively. If a variable +@@ -1274,7 +1278,7 @@ + + { Splits a file name into directory, name and extension. Each of + Dir, BaseName and Ext may be Null. } +-procedure FSplit (const Path: String; var Dir, BaseName, Ext: String); attribute (name = '_p_FSplit'); external; ++procedure FSplit (const Path: String; var Dir: String; var BaseName: String; var Ext: String); attribute (name = '_p_FSplit'); external; + + { Functions that extract one or two of the parts from FSplit. + DirFromPath returns DirSelf + DirSeparator if the path contains no +@@ -1303,7 +1307,7 @@ + + { Returns the first occurence of SubString in s that is not quoted + at the beginning, or 0 if no such occurence exists. } +-function FindNonQuotedStr (const SubString, s: String; From: Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); external; ++function FindNonQuotedStr (const SubString: String; const s: String; From: Integer): Integer; attribute (name = '_p_FindNonQuotedStr'); external; + + { Does a string contain non-quoted wildcard characters? } + function HasWildCards (const s: String): Boolean; attribute (name = '_p_HasWildCards'); external; +@@ -1330,10 +1334,10 @@ + procedure DisposePPStrings (Strings: PPStrings); attribute (name = '_p_DisposePPStrings'); external; + + { Tests if a file name matches a shell wildcard pattern (?, *, []) } +-function FileNameMatch (const Pattern, FileName: String): Boolean; attribute (name = '_p_FileNameMatch'); external; ++function FileNameMatch (const Pattern: String; const FileName: String): Boolean; attribute (name = '_p_FileNameMatch'); external; + + { FileNameMatch with BraceExpand } +-function MultiFileNameMatch (const Pattern, FileName: String): Boolean; attribute (name = '_p_MultiFileNameMatch'); external; ++function MultiFileNameMatch (const Pattern: String; const FileName: String): Boolean; attribute (name = '_p_MultiFileNameMatch'); external; + + { File name globbing } + { GlobInit is implied by Glob and MultiGlob, not by GlobOn and +@@ -1451,7 +1455,7 @@ + HOME is not. However, it is easy for users to set it if they want + their config files in a certain directory rather than with the + executables. } +-function ConfigFileName (const Prefix, BaseName: String; Global: Boolean): TString; attribute (name = '_p_ConfigFileName'); external; ++function ConfigFileName (const Prefix: String; const BaseName: String; Global: Boolean): TString; attribute (name = '_p_ConfigFileName'); external; + + { Returns a directory name suitable for global, machine-independent + data. The function garantees that the name returned ends with a +@@ -1472,7 +1476,7 @@ + + About the symbols used above, and the two possibilities under Dos, + see the comments for ConfigFileName. } +-function DataDirectoryName (const Prefix, BaseName: String): TString; attribute (name = '_p_DataDirectoryName'); external; ++function DataDirectoryName (const Prefix: String; const BaseName: String): TString; attribute (name = '_p_DataDirectoryName'); external; + + { Executes a command line. Reports execution errors via the IOResult + mechanism and returns the exit status of the executed program. +@@ -1935,6 +1939,17 @@ + + { Initialization, from init.pas } + ++{ Initialize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. ++ ArgumentCount, Arguments are argc and argv in C; StartEnvironment ++ is the environment variable pointer, and can be nil if other ways ++ to obtain the environment are available. Options can be 0 or a ++ combination of ro_* flags as defined in rts/constants.def. } ++procedure GPC_Initialize (ArgumentCount: CInteger; ++ Arguments, StartEnvironment: PCStrings; ++ Options: CInteger); ++ attribute (name = '_p_initialize'); external; ++ + var + InitProc: ^procedure; attribute (name = '_p_InitProc'); external; + +diff -urN gpc-20060325/p/rts/heap.pas gpc-20070904/p/rts/heap.pas +--- gpc-20060325/p/rts/heap.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/heap.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/init.pas gpc-20070904/p/rts/init.pas +--- gpc-20060325/p/rts/init.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/init.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -43,9 +43,19 @@ + + procedure InitDummy; attribute (name = '_p_InitDummy'); + procedure DoInitProc; attribute (name = '_p_DoInitProc'); +-procedure GPC_Initialize (ArgumentCount: CInteger; Arguments, StartEnvironment: PCStrings; Options: CInteger); attribute (name = '_p_initialize'); + {@endinternal} + ++{ Initialize the GPC Run Time System. This is normally called ++ automatically. Call it manually only in very special situations. ++ ArgumentCount, Arguments are argc and argv in C; StartEnvironment ++ is the environment variable pointer, and can be nil if other ways ++ to obtain the environment are available. Options can be 0 or a ++ combination of ro_* flags as defined in rts/constants.def. } ++procedure GPC_Initialize (ArgumentCount: CInteger; ++ Arguments, StartEnvironment: PCStrings; ++ Options: CInteger); ++ attribute (name = '_p_initialize'); ++ + var + InitProc: ^procedure = @InitDummy; attribute (name = '_p_InitProc'); + +diff -urN gpc-20060325/p/rts/make-acconfig-h.m4 gpc-20070904/p/rts/make-acconfig-h.m4 +--- gpc-20060325/p/rts/make-acconfig-h.m4 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/make-acconfig-h.m4 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + dnl + dnl GNU Pascal is free software; you can redistribute it and/or modify + dnl it under the terms of the GNU General Public License as published by +-dnl the Free Software Foundation; either version 2 of the License, or ++dnl the Free Software Foundation; either version 3 of the License, or + dnl (at your option) any later version. + dnl + dnl GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/rts/make-gpc-pas gpc-20070904/p/rts/make-gpc-pas +--- gpc-20060325/p/rts/make-gpc-pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/make-gpc-pas 2007-09-04 08:22:54.000000000 +0200 +@@ -15,7 +15,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -102,7 +102,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/make-rtsc-pas gpc-20070904/p/rts/make-rtsc-pas +--- gpc-20060325/p/rts/make-rtsc-pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/make-rtsc-pas 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -72,7 +72,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/math.pas gpc-20070904/p/rts/math.pas +--- gpc-20060325/p/rts/math.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/math.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/move.pas gpc-20070904/p/rts/move.pas +--- gpc-20060325/p/rts/move.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/move.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/random.pas gpc-20070904/p/rts/random.pas +--- gpc-20060325/p/rts/random.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/random.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/rts-version gpc-20070904/p/rts/rts-version +--- gpc-20060325/p/rts/rts-version 2006-03-25 02:53:09.000000000 +0100 ++++ gpc-20070904/p/rts/rts-version 2007-09-04 08:22:54.000000000 +0200 +@@ -1 +1 @@ +-20060325 ++20070904 +diff -urN gpc-20060325/p/rts/rts.c gpc-20070904/p/rts/rts.c +--- gpc-20060325/p/rts/rts.c 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/rts.c 2007-09-04 08:22:54.000000000 +0200 +@@ -19,7 +19,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/rtsc.pas gpc-20070904/p/rts/rtsc.pas +--- gpc-20060325/p/rts/rtsc.pas 2006-02-18 14:37:50.000000000 +0100 ++++ gpc-20070904/p/rts/rtsc.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -21,7 +21,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/sets.pas gpc-20070904/p/rts/sets.pas +--- gpc-20060325/p/rts/sets.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/sets.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -18,7 +18,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/rts/string1.pas gpc-20070904/p/rts/string1.pas +--- gpc-20060325/p/rts/string1.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/string1.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -83,27 +83,27 @@ + function UpCaseStr (const s: String) = Result: TString; attribute (name = '_p_UpCaseStr'); + function LoCaseStr (const s: String) = Result: TString; attribute (name = '_p_LoCaseStr'); + +-function StrEqualCase (const s1, s2: String): Boolean; attribute (name = '_p_StrEqualCase'); ++function StrEqualCase (const s1: String; const s2: String): Boolean; attribute (name = '_p_StrEqualCase'); + +-function Pos (const SubString, s: String): Integer; attribute (name = '_p_Pos'); ++function Pos (const SubString: String; const s: String): Integer; attribute (name = '_p_Pos'); + function PosChar (const ch: Char; const s: String): Integer; attribute (name = '_p_PosChar'); +-function LastPos (const SubString, s: String): Integer; attribute (name = '_p_LastPos'); +-function PosCase (const SubString, s: String): Integer; attribute (name = '_p_PosCase'); +-function LastPosCase (const SubString, s: String): Integer; attribute (name = '_p_LastPosCase'); ++function LastPos (const SubString: String; const s: String): Integer; attribute (name = '_p_LastPos'); ++function PosCase (const SubString: String; const s: String): Integer; attribute (name = '_p_PosCase'); ++function LastPosCase (const SubString: String; const s: String): Integer; attribute (name = '_p_LastPosCase'); + function CharPos (const Chars: CharSet; const s: String): Integer; attribute (name = '_p_CharPos'); + function LastCharPos (const Chars: CharSet; const s: String): Integer; attribute (name = '_p_LastCharPos'); + +-function PosFrom (const SubString, s: String; From: Integer): Integer; attribute (name = '_p_PosFrom'); +-function LastPosTill (const SubString, s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTill'); +-function PosFromCase (const SubString, s: String; From: Integer): Integer; attribute (name = '_p_PosFromCase'); +-function LastPosTillCase (const SubString, s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); ++function PosFrom (const SubString: String; const s: String; From: Integer): Integer; attribute (name = '_p_PosFrom'); ++function LastPosTill (const SubString: String; const s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTill'); ++function PosFromCase (const SubString: String; const s: String; From: Integer): Integer; attribute (name = '_p_PosFromCase'); ++function LastPosTillCase (const SubString: String; const s: String; Till: Integer): Integer; attribute (name = '_p_LastPosTillCase'); + function CharPosFrom (const Chars: CharSet; const s: String; From: Integer): Integer; attribute (name = '_p_CharPosFrom'); + function LastCharPosTill (const Chars: CharSet; const s: String; Till: Integer): Integer; attribute (name = '_p_LastCharPosTill'); + +-function IsPrefix (const Prefix, s: String): Boolean; attribute (name = '_p_IsPrefix'); +-function IsSuffix (const Suffix, s: String): Boolean; attribute (name = '_p_IsSuffix'); +-function IsPrefixCase (const Prefix, s: String): Boolean; attribute (name = '_p_IsPrefixCase'); +-function IsSuffixCase (const Suffix, s: String): Boolean; attribute (name = '_p_IsSuffixCase'); ++function IsPrefix (const Prefix: String; const s: String): Boolean; attribute (name = '_p_IsPrefix'); ++function IsSuffix (const Suffix: String; const s: String): Boolean; attribute (name = '_p_IsSuffix'); ++function IsPrefixCase (const Prefix: String; const s: String): Boolean; attribute (name = '_p_IsPrefixCase'); ++function IsSuffixCase (const Suffix: String; const s: String): Boolean; attribute (name = '_p_IsSuffixCase'); + + function CStringLength (Src: CString): SizeType; attribute (inline, name = '_p_CStringLength'); + function CStringEnd (Src: CString): CString; attribute (inline, name = '_p_CStringEnd'); +@@ -226,12 +226,12 @@ + MemCompCase := True + end; + +-function StrEqualCase (const s1, s2: String): Boolean; ++function StrEqualCase (const s1: String; const s2: String): Boolean; + begin + StrEqualCase := (Length (s1) = Length (s2)) and ((s1 = '') or MemCompCase (s1[1], s2[1], Length (s1))) + end; + +-function Pos (const SubString, s: String): Integer; ++function Pos (const SubString: String; const s: String): Integer; + begin + Pos := PosFrom (SubString, s, 1) + end; +@@ -244,17 +244,17 @@ + if i > Length (s) then PosChar := 0 else PosChar := i + end; + +-function LastPos (const SubString, s: String): Integer; ++function LastPos (const SubString: String; const s: String): Integer; + begin + LastPos := LastPosTill (SubString, s, Length (s)) + end; + +-function PosCase (const SubString, s: String): Integer; ++function PosCase (const SubString: String; const s: String): Integer; + begin + PosCase := PosFromCase (SubString, s, 1) + end; + +-function LastPosCase (const SubString, s: String): Integer; ++function LastPosCase (const SubString: String; const s: String): Integer; + begin + LastPosCase := LastPosTillCase (SubString, s, Length (s)) + end; +@@ -275,7 +275,7 @@ + LastCharPos := i + end; + +-function PosFrom (const SubString, s: String; From: Integer): Integer; ++function PosFrom (const SubString: String; const s: String; From: Integer): Integer; + var m, i, n: Integer; + begin + m := Max (1, From); +@@ -299,7 +299,7 @@ + end + end; + +-function LastPosTill (const SubString, s: String; Till: Integer): Integer; ++function LastPosTill (const SubString: String; const s: String; Till: Integer): Integer; + var m, i: Integer; + begin + m := Max (0, Min (Length (s), Till)); +@@ -317,7 +317,7 @@ + end + end; + +-function PosFromCase (const SubString, s: String; From: Integer): Integer; ++function PosFromCase (const SubString: String; const s: String; From: Integer): Integer; + var m, i, n: Integer; + begin + m := Max (1, From); +@@ -336,7 +336,7 @@ + end + end; + +-function LastPosTillCase (const SubString, s: String; Till: Integer): Integer; ++function LastPosTillCase (const SubString: String; const s: String; Till: Integer): Integer; + var m, i: Integer; + begin + m := Max (0, Min (Length (s), Till)); +@@ -370,22 +370,22 @@ + LastCharPosTill := i + end; + +-function IsPrefix (const Prefix, s: String): Boolean; ++function IsPrefix (const Prefix: String; const s: String): Boolean; + begin + IsPrefix := (Prefix = '') or ((Length (s) >= Length (Prefix)) and EQ (s[1 .. Length (Prefix)], Prefix)) + end; + +-function IsSuffix (const Suffix, s: String): Boolean; ++function IsSuffix (const Suffix: String; const s: String): Boolean; + begin + IsSuffix := (Suffix = '') or ((Length (s) >= Length (Suffix)) and EQ (s[Length (s) - Length (Suffix) + 1 .. Length (s)], Suffix)) + end; + +-function IsPrefixCase (const Prefix, s: String): Boolean; ++function IsPrefixCase (const Prefix: String; const s: String): Boolean; + begin + IsPrefixCase := (Prefix = '') or ((Length (s) >= Length (Prefix)) and StrEqualCase (s[1 .. Length (Prefix)], Prefix)) + end; + +-function IsSuffixCase (const Suffix, s: String): Boolean; ++function IsSuffixCase (const Suffix: String; const s: String): Boolean; + begin + IsSuffixCase := (Suffix = '') or ((Length (s) >= Length (Suffix)) and StrEqualCase (s[Length (s) - Length (Suffix) + 1 .. Length (s)], Suffix)) + end; +diff -urN gpc-20060325/p/rts/string2.pas gpc-20070904/p/rts/string2.pas +--- gpc-20060325/p/rts/string2.pas 2006-03-03 14:56:07.000000000 +0100 ++++ gpc-20070904/p/rts/string2.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -126,7 +126,7 @@ + + { Sets an environment variable with the name given in VarName to the + value Value. A previous value, if any, is overwritten. } +-procedure SetEnv (const VarName, Value: String); attribute (name = '_p_SetEnv'); ++procedure SetEnv (const VarName: String; const Value: String); attribute (name = '_p_SetEnv'); + + { Un-sets an environment variable with the name given in VarName. } + procedure UnSetEnv (const VarName: String); attribute (name = '_p_UnSetEnv'); +@@ -236,7 +236,7 @@ + if Temp = nil then GetEnv := '' else GetEnv := CString2String (Temp) + end; + +-procedure SetEnv (const VarName, Value: String); ++procedure SetEnv (const VarName: String; const Value: String); + var + i: Integer; + NewEnvironment: PEnvironment; +@@ -436,7 +436,8 @@ + for n := 1 to Count do + begin + k := Lengths^[n - 1]; +- Res^[Size + 1 .. Size + k] := Strings^[n - 1]^[0 .. k - 1]; ++ if k > 0 then ++ Res^[Size + 1 .. Size + k] := Strings^[n - 1]^[0 .. k - 1]; + Inc (Size, k) + end; + { Clean up and return result } +diff -urN gpc-20060325/p/rts/time.pas gpc-20070904/p/rts/time.pas +--- gpc-20060325/p/rts/time.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/rts/time.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/script/catlib gpc-20070904/p/script/catlib +--- gpc-20060325/p/script/catlib 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/catlib 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/cfgpc gpc-20070904/p/script/cfgpc +--- gpc-20060325/p/script/cfgpc 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/cfgpc 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/check-bison-top-down gpc-20070904/p/script/check-bison-top-down +--- gpc-20060325/p/script/check-bison-top-down 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/check-bison-top-down 2007-09-04 08:22:54.000000000 +0200 +@@ -15,7 +15,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/check-doc gpc-20070904/p/script/check-doc +--- gpc-20060325/p/script/check-doc 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/check-doc 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/check-test-name gpc-20070904/p/script/check-test-name +--- gpc-20060325/p/script/check-test-name 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/check-test-name 2007-09-04 08:22:54.000000000 +0200 +@@ -13,7 +13,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/crtinc2h gpc-20070904/p/script/crtinc2h +--- gpc-20060325/p/script/crtinc2h 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/crtinc2h 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/extract-doc-demos gpc-20070904/p/script/extract-doc-demos +--- gpc-20060325/p/script/extract-doc-demos 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/extract-doc-demos 2007-09-04 08:22:54.000000000 +0200 +@@ -22,7 +22,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/find-sed gpc-20070904/p/script/find-sed +--- gpc-20060325/p/script/find-sed 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/find-sed 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/gnumsg2spc gpc-20070904/p/script/gnumsg2spc +--- gpc-20060325/p/script/gnumsg2spc 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/gnumsg2spc 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/gpc-run gpc-20070904/p/script/gpc-run +--- gpc-20060325/p/script/gpc-run 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/gpc-run 2007-09-04 08:22:54.000000000 +0200 +@@ -15,7 +15,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/gpcdiff gpc-20070904/p/script/gpcdiff +--- gpc-20060325/p/script/gpcdiff 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/gpcdiff 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/install-gpc-binary gpc-20070904/p/script/install-gpc-binary +--- gpc-20060325/p/script/install-gpc-binary 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/install-gpc-binary 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + # + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License as +-# published by the Free Software Foundation, version 2. ++# published by the Free Software Foundation, version 3. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/script/keywords2texi gpc-20070904/p/script/keywords2texi +--- gpc-20060325/p/script/keywords2texi 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/keywords2texi 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/lang-options2texi gpc-20070904/p/script/lang-options2texi +--- gpc-20060325/p/script/lang-options2texi 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/lang-options2texi 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/make-homepage gpc-20070904/p/script/make-homepage +--- gpc-20060325/p/script/make-homepage 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/make-homepage 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/make-homepage-gpcs gpc-20070904/p/script/make-homepage-gpcs +--- gpc-20060325/p/script/make-homepage-gpcs 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/make-homepage-gpcs 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/mg gpc-20070904/p/script/mg +--- gpc-20060325/p/script/mg 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/mg 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/mk-handle-opts-c gpc-20070904/p/script/mk-handle-opts-c +--- gpc-20060325/p/script/mk-handle-opts-c 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/mk-handle-opts-c 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/mk-lang_opt gpc-20070904/p/script/mk-lang_opt +--- gpc-20060325/p/script/mk-lang_opt 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/mk-lang_opt 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -36,7 +36,7 @@ + ; + ; GNU Pascal is free software; you can redistribute it and/or modify + ; it under the terms of the GNU General Public License as published by +-; the Free Software Foundation; either version 2, or (at your option) ++; the Free Software Foundation; either version 3, or (at your option) + ; any later version. + ; + ; GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/mkdiff gpc-20070904/p/script/mkdiff +--- gpc-20060325/p/script/mkdiff 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/mkdiff 2007-09-04 08:22:54.000000000 +0200 +@@ -12,7 +12,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/mkdjgppgpczip gpc-20070904/p/script/mkdjgppgpczip +--- gpc-20060325/p/script/mkdjgppgpczip 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/mkdjgppgpczip 2007-09-04 08:22:54.000000000 +0200 +@@ -8,7 +8,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/mkgpc gpc-20070904/p/script/mkgpc +--- gpc-20060325/p/script/mkgpc 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/mkgpc 2007-09-04 08:22:54.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/pas2texi gpc-20070904/p/script/pas2texi +--- gpc-20060325/p/script/pas2texi 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/pas2texi 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/ps2dsc gpc-20070904/p/script/ps2dsc +--- gpc-20060325/p/script/ps2dsc 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/ps2dsc 2007-09-04 08:22:54.000000000 +0200 +@@ -16,7 +16,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/script/testgpc gpc-20070904/p/script/testgpc +--- gpc-20060325/p/script/testgpc 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/script/testgpc 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/statements.c gpc-20070904/p/statements.c +--- gpc-20060325/p/statements.c 2006-03-24 03:47:15.000000000 +0100 ++++ gpc-20070904/p/statements.c 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -73,9 +73,11 @@ + if (PEDANTIC (GNU_PASCAL)) + { + if (co->pascal_dialect & B_D_M_PASCAL) +- warning ("GPC and Borland Pascal have different `asm' syntax"); ++ gpc_warning ("GPC and Borland Pascal have different `asm' syntax"); ++#if 0 + else + chk_dialect ("`asm' is", B_D_M_PASCAL); ++#endif + } + + string = combine_strings (string, 2); +@@ -109,6 +111,8 @@ + + /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of OUTPUTS + some trees for where the values were actually stored. */ ++ /* @@@ This is incompatible with C: it loses distinction between ++ asm ('foo') and asm('foo':) */ + if (outputs || inputs || clobbers) + #ifndef GCC_3_4 + expand_asm_operands (string, outputs, inputs, clobbers, vol, input_filename, lineno); +@@ -203,7 +207,7 @@ + else if (TREE_CODE (t) == VAR_DECL && PASCAL_FOR_LOOP_COUNTER (t)) + { + if (co->pascal_dialect & B_D_M_PASCAL) +- warning ("%s of `for' loop counter", description); ++ gpc_warning ("%s of `for' loop counter", description); + else + { + error ("%s of `for' loop counter", description); +@@ -245,11 +249,11 @@ + return 0; + } + else +- warning ("%s: typed const misused as initialized variable", description); ++ gpc_warning ("%s: typed const misused as initialized variable", description); + if (!informed) + { +- warning (" (Better use ISO 10206 Extended Pascal initialized"); +- warning (" types and variables: `var foo: integer value 7'.)"); ++ gpc_warning (" (Better use ISO 10206 Extended Pascal initialized"); ++ gpc_warning (" types and variables: `var foo: integer value 7'.)"); + informed = 1; + } + } +@@ -284,7 +288,7 @@ + { + tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl)); + if (TREE_THIS_VOLATILE (current_function_decl)) +- warning ("routine declared `noreturn' returns"); ++ gpc_warning ("routine declared `noreturn' returns"); + /* This must be done before returning, otherwise it would jump over it. */ + cleanup_routine (); + if (!retval) +@@ -396,9 +400,9 @@ + if (const_lt (chi, hi)) + nlo = fold (build (PLUS_EXPR, TREE_TYPE (chi), (ehi = chi), convert (TREE_TYPE (chi), integer_one_node))); + if (tree_int_cst_equal (elo, ehi)) +- warning ("duplicate `case' element %ld", (long) TREE_INT_CST_LOW (elo)); ++ gpc_warning ("duplicate `case' element %ld", (long) TREE_INT_CST_LOW (elo)); + else +- warning ("duplicate `case' range %ld .. %ld", (long) TREE_INT_CST_LOW (elo), (long) TREE_INT_CST_LOW (ehi)); ++ gpc_warning ("duplicate `case' range %ld .. %ld", (long) TREE_INT_CST_LOW (elo), (long) TREE_INT_CST_LOW (ehi)); + if (!nlo && !nhi) + lo = hi = NULL_TREE; + else +@@ -591,7 +595,8 @@ + CHK_EM (counter); + + /* Make a set out of a set constructor */ +- if (TREE_CODE (expr) == CONSTRUCTOR && TREE_CODE (TREE_TYPE (expr)) == SET_TYPE) ++ if (TREE_CODE (expr) == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (TREE_TYPE (expr)) == SET_TYPE) + expr = construct_set (expr, NULL_TREE, 0); + if (TREE_CODE (TREE_TYPE (expr)) != SET_TYPE) + { +@@ -600,7 +605,7 @@ + } + else if (TREE_TYPE (expr) == empty_set_type_node) + { +- warning ("`for ... in []' (empty set) has no effect"); ++ gpc_warning ("`for ... in []' (empty set) has no effect"); + /* Be as silent as possible to give the optimizer a chance to remove the whole loop. */ + empty_set = 1; + } +@@ -916,7 +921,7 @@ + || TREE_READONLY (t) + || TYPE_READONLY (TREE_TYPE (t)) + || (TREE_CODE (t) == VAR_DECL && PASCAL_DECL_TYPED_CONST (t))) +- warning ("constant file variables are pointless"); ++ gpc_warning ("constant file variables are pointless"); + + /* Always pass the internal name to the RTS, not only for external files. */ + if (TREE_CODE (thing) == VAR_DECL) +@@ -929,7 +934,7 @@ + fname = build_string_constant (temp, strlen (temp), 0); + + if (pedantic && PASCAL_TYPE_PACKED (type)) +- warning ("`packed' has no effect on the external file format"); ++ gpc_warning ("`packed' has no effect on the external file format"); + + /* Pass the size of the file buffer. */ + file_size = (TREE_CODE (component_type) == VOID_TYPE) ? size_one_node : size_in_bytes (component_type); +@@ -1053,10 +1058,16 @@ + { + if (!TREE_VALUE (decl)) + expand_expr_stmt (TREE_PURPOSE (decl)); +- else if (!TREE_PURPOSE (decl)) +- init_any (TREE_VALUE (decl), the_end, 1); + else ++ { ++ init_any (TREE_VALUE (decl), the_end, 1); ++ if (TREE_PURPOSE (decl)) ++ expand_pascal_assignment2 (TREE_VALUE (decl), ++ TREE_PURPOSE (decl), 1); ++#if 0 + expand_expr_stmt (build_modify_expr (TREE_VALUE (decl), INIT_EXPR, TREE_PURPOSE (decl))); ++#endif ++ } + } + for (decl = names; decl; decl = TREE_CHAIN (decl)) + { +@@ -1146,10 +1157,10 @@ + } + + void +-expand_pascal_assignment (tree target, tree source) ++expand_pascal_assignment2 (tree target, tree source, int is_init) + { + tree stmt, schema_source, schema_target; +- int allow_restricted_target = 0, allow_restricted_source = 0; ++ int allow_restricted_target = is_init, allow_restricted_source = is_init; + if (EM (TREE_TYPE (source)) || EM (TREE_TYPE (target))) + return; + +@@ -1206,7 +1217,7 @@ + allow_restricted_target = 1; + } + +- if (!mark_lvalue (target, "assignment", 1)) ++ if (!mark_lvalue (target, is_init? "initialization" : "assignment", !is_init)) + return; + + schema_source = undo_schema_dereference (source); +@@ -1250,7 +1261,9 @@ + tree schema_check = check_discriminants (schema_target, schema_source); + if (!EM (schema_check)) + { +- if (!lvalue_or_else (schema_target, "assignment") || !mark_lvalue (schema_target, "assignment", 1)) ++ if (!lvalue_or_else (schema_target, "assignment") ++ || !mark_lvalue (schema_target, is_init ? "initialization" ++ : "assignment", is_init)) + return; + stmt = build (MODIFY_EXPR, TREE_TYPE (schema_target), + schema_target, schema_source); +@@ -1259,12 +1272,19 @@ + stmt = build (COMPOUND_EXPR, TREE_TYPE (stmt), schema_check, stmt); + } + else +- stmt = build_modify_expr (target, NOP_EXPR, source); ++ stmt = build_modify_expr (target, ++ is_init ? INIT_EXPR : NOP_EXPR, source); + } + if (stmt && !EM (stmt)) + expand_expr_stmt (stmt); + } + ++void ++expand_pascal_assignment (tree target, tree source) ++{ ++ expand_pascal_assignment2 (target, source, 0); ++} ++ + tree + assign_set (tree target, tree source) + { +@@ -1273,7 +1293,8 @@ + return error_mark_node; + /* @@ Test new constructor code without this. + Construct a set directly to the set variable. */ +- if (TREE_CODE (source) == CONSTRUCTOR && TREE_CODE (TREE_TYPE (source)) == SET_TYPE) ++ if (TREE_CODE (source) == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (TREE_TYPE (source)) == SET_TYPE) + { + source = construct_set (source, target, 0); + if (!source) +@@ -1310,7 +1331,7 @@ + Each string may be either a fixed or variable length string. + @@@ No sophisticated checks are made for capacity violations. */ + tree +-assign_string (tree target, tree source) ++assign_string2 (tree target, tree source, int is_init) + { + tree length = NULL_TREE; + tree t_type = base_type (TREE_TYPE (target)); +@@ -1334,7 +1355,7 @@ + if (TREE_CODE (t_type) == CHAR_TYPE) + { + if (pedantic || !(co->pascal_dialect & E_O_PASCAL)) +- warning ("assignment of string value to char variable"); ++ gpc_warning ("assignment of string value to char variable"); + expr1 = PASCAL_STRING_VALUE (source); + expr1 = build_modify_expr (target, NOP_EXPR, build_array_ref (expr1, + TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (expr1))))); +@@ -1363,29 +1384,27 @@ + length = integer_zero_node; + else + { +-#if 0 +- /* Use save_expr, so the length is not computed twice (for the +- number of chars to move and the assignment to the target length). */ +- length = save_expr (fold (build_pascal_binary_op (MIN_EXPR, PASCAL_STRING_LENGTH (source), capacity))); +- /* The target needs to be an lvalue, but the source might +- be e.g. an array returned by a function or whatever. */ +- expr1 = build_memcpy (build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (target), 1), +- build1 (ADDR_EXPR, cstring_type_node, PASCAL_STRING_VALUE (source)), length); +-#else +- /* save_expr would cause problems */ +- tree olen = PASCAL_STRING_LENGTH (source); +- tree las; ++ /* Use save_expr_string, so the string is not evaluated 2 ++ or 3 times (for the number of chars to move, assignment ++ to the target length and the chars). */ ++ tree olen, las; ++ source = save_expr_string (source); ++ /* The code below looks silly: we are saving length ++ of already saved string. But doing this copy ++ prevents gimplifier from messing fjf630e.pas */ ++ olen = PASCAL_STRING_LENGTH (source); + length = make_new_variable ("str_len", TREE_TYPE (olen)); + las = build_pascal_binary_op (MIN_EXPR, olen, capacity); + las = build_modify_expr (length, NOP_EXPR, fold (las)); ++ /* The target needs to be an lvalue, but the source might ++ be e.g. an array returned by a function or whatever. */ + expr1 = build_memcpy ( + build_unary_op (ADDR_EXPR, + PASCAL_STRING_VALUE (target), 1), +- build1 (ADDR_EXPR, cstring_type_node, ++ build1 (ADDR_EXPR, cstring_type_node, + PASCAL_STRING_VALUE (source)), + length); + expr1 = build (COMPOUND_EXPR, TREE_TYPE (expr1), las, expr1); +-#endif + } + } + break; +@@ -1431,6 +1450,12 @@ + return expr; + } + ++tree ++assign_string (tree target, tree source) ++{ ++ return assign_string2 (target, source, 0); ++} ++ + /* Main program, module initializers/finalizers. */ + + static void +diff -urN gpc-20060325/p/test/Makefile gpc-20070904/p/test/Makefile +--- gpc-20060325/p/test/Makefile 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/test/Makefile 2007-09-04 08:22:54.000000000 +0200 +@@ -10,7 +10,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/test/README gpc-20070904/p/test/README +--- gpc-20060325/p/test/README 2006-02-18 14:37:53.000000000 +0100 ++++ gpc-20070904/p/test/README 2007-09-04 08:22:55.000000000 +0200 +@@ -4,7 +4,7 @@ + Note: This file is the `README' file of the `test' directory in the GPC + source distribution, _and_ the file `BUGS' in GPC binary distributions. + +-GPC 2.1, 20060215 ++GPC 2.1, 20070904 + + 1 The GPC Test Suite + ******************** +diff -urN gpc-20060325/p/test/asmtest.pas gpc-20070904/p/test/asmtest.pas +--- gpc-20060325/p/test/asmtest.pas 2005-10-24 04:26:29.000000000 +0200 ++++ gpc-20070904/p/test/asmtest.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -46,14 +46,16 @@ + work: Integer value ord ( 'O' ) + ord ( 'K' ) shl 8; + + procedure I_am_happy_because (var dest; count, fill_value: Integer); ++var dummy : pointer; + begin + + { IA32 } +- asm ('cld' ++ asm volatile ('cld' + 'rep' + 'stosl' +- : {* no output registers *} +- : 'c' (count), 'a' (fill_value), 'D' (@dest) ); ++ : '=c' (count), '=D' (dummy) ++ : '0' (count), 'a' (fill_value), '1' (@dest) ++ : 'cc', 'memory' ); + + end; + +@@ -91,5 +93,7 @@ + I_am_happy_because(this, does, work); + Check ( this [ 5..6 ] ); + +- if IsOK then WriteLn ('OK') ++ if IsOK then WriteLn ('OK'); ++ { Just check that "simple" form is accepted } ++ asm ('nop'); + end. +diff -urN gpc-20060325/p/test/c_gpc.pas gpc-20070904/p/test/c_gpc.pas +--- gpc-20060325/p/test/c_gpc.pas 2006-02-18 14:23:00.000000000 +0100 ++++ gpc-20070904/p/test/c_gpc.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -33,14 +33,14 @@ + { External declarations we use from the C code } + + var +- CVariable: Integer; external name 'c_variable'; ++ CVariable: CInteger; external name 'c_variable'; + + procedure CRoutine; external name 'c_routine'; + + { Pascal code } + + var +- PascalProgramVariable: Integer = 17; attribute (name = 'pascal_program_variable'); ++ PascalProgramVariable: CInteger = 17; attribute (name = 'pascal_program_variable'); + + procedure PascalProgramRoutine; attribute (name = 'pascal_program_routine'); + begin +diff -urN gpc-20060325/p/test/chief40.pas gpc-20070904/p/test/chief40.pas +--- gpc-20060325/p/test/chief40.pas 2002-09-23 09:39:12.000000000 +0200 ++++ gpc-20070904/p/test/chief40.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -4,12 +4,15 @@ + a : LongInt; + b : Byte; + ++const ++ MaxCInt = High (CInteger); ++ + begin +- a := 2 * MaxInt; ++ a := 2 * MaxCInt; + b := 10; + a := 2 * a + b; +- if (a = 4 * MaxInt + 10) and (a > MaxInt) then ++ if (a = 4 * MaxCInt + 10) and (a > MaxCInt) then + WriteLn ('OK') + else +- WriteLn ('failed ', a, ' ', 4 * MaxInt + 10, ' ', a > MaxInt) ++ WriteLn ('failed ', a, ' ', 4 * MaxCInt + 10, ' ', a > MaxCInt) + end. +diff -urN gpc-20060325/p/test/conar10a.pas gpc-20070904/p/test/conar10a.pas +--- gpc-20060325/p/test/conar10a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/conar10a.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,7 @@ ++program conar10a; ++procedure foo(a : array[i..j:integer] of string); { WRONG } ++begin ++end; ++begin ++end ++. +diff -urN gpc-20060325/p/test/conar10b.pas gpc-20070904/p/test/conar10b.pas +--- gpc-20060325/p/test/conar10b.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/conar10b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,7 @@ ++program conar10b; ++procedure foo(var a : array[i..j:integer] of string); { WRONG } ++begin ++end; ++begin ++end ++. +diff -urN gpc-20060325/p/test/conar10c.pas gpc-20070904/p/test/conar10c.pas +--- gpc-20060325/p/test/conar10c.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/conar10c.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,8 @@ ++program conar10c; ++type s(i: integer) = integer; ++procedure foo(a : array[i..j:integer] of s); { WRONG } ++begin ++end; ++begin ++end ++. +diff -urN gpc-20060325/p/test/conar10d.pas gpc-20070904/p/test/conar10d.pas +--- gpc-20060325/p/test/conar10d.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/conar10d.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,8 @@ ++program conar10c; ++type s(i: integer) = integer; ++procedure foo(var a : array[i..j:integer] of s); { WRONG } ++begin ++end; ++begin ++end ++. +diff -urN gpc-20060325/p/test/conar10e.pas gpc-20070904/p/test/conar10e.pas +--- gpc-20060325/p/test/conar10e.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/conar10e.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,8 @@ ++program conar10e; ++type s(i: integer) = array[1..i] of integer; ++procedure foo(a : array[i..j:integer] of s); { WRONG } ++begin ++end; ++begin ++end ++. +diff -urN gpc-20060325/p/test/conar10f.pas gpc-20070904/p/test/conar10f.pas +--- gpc-20060325/p/test/conar10f.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/conar10f.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,8 @@ ++program conar10c; ++type s(i: integer) = array[1..i] of integer; ++procedure foo(a : array[i..j:integer] of s); { WRONG } ++begin ++end; ++begin ++end ++. +diff -urN gpc-20060325/p/test/copy1.pas gpc-20070904/p/test/copy1.pas +--- gpc-20060325/p/test/copy1.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/copy1.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,12 @@ ++program copy1; ++ ++type String255 = String(255); ++function flux: String255; ++ begin ++ flux := 'NaOKux' ++ end; ++ ++begin ++ writeln(Copy(flux, 3, 2)) ++end ++. +diff -urN gpc-20060325/p/test/dave7a.pas gpc-20070904/p/test/dave7a.pas +--- gpc-20060325/p/test/dave7a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7a.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ ++begin ++ s := 'abc'; ++ if s = 'abc' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7b.pas gpc-20070904/p/test/dave7b.pas +--- gpc-20060325/p/test/dave7b.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7b.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,12 @@ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ t : packed array [1..3] of char; ++ ++begin ++ s := 'abc'; ++ t := 'abc'; ++ if s <> t { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7c.pas gpc-20070904/p/test/dave7c.pas +--- gpc-20060325/p/test/dave7c.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7c.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ ++begin ++ s := 'abc'; ++ if s = 'abcde' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7d.pas gpc-20070904/p/test/dave7d.pas +--- gpc-20060325/p/test/dave7d.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7d.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,12 @@ ++{$extended-pascal} ++ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ ++begin ++ s := 'abc'; ++ if s = 'abcde' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7e.pas gpc-20070904/p/test/dave7e.pas +--- gpc-20060325/p/test/dave7e.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7e.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ ++begin ++ s := 'abc'; ++ if s = 'abcd ' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7f.pas gpc-20070904/p/test/dave7f.pas +--- gpc-20060325/p/test/dave7f.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7f.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,12 @@ ++{$extended-pascal} ++ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ ++begin ++ s := 'abc'; ++ if s = 'abcd ' ++ then writeln ('failed') ++ else writeln ('OK') ++end. +diff -urN gpc-20060325/p/test/dave7g.pas gpc-20070904/p/test/dave7g.pas +--- gpc-20060325/p/test/dave7g.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7g.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var c : Char; ++ ++begin ++ c := 'a'; ++ if c = '' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7h.pas gpc-20070904/p/test/dave7h.pas +--- gpc-20060325/p/test/dave7h.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7h.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,12 @@ ++{$extended-pascal} ++ ++program comp (output); ++ ++ var c : Char; ++ ++begin ++ c := 'a'; ++ if c = '' ++ then writeln ('failed') ++ else writeln ('OK') ++end. +diff -urN gpc-20060325/p/test/dave7i.pas gpc-20070904/p/test/dave7i.pas +--- gpc-20060325/p/test/dave7i.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7i.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var c : Char; ++ ++begin ++ c := 'a'; ++ if c = 'ab' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7j.pas gpc-20070904/p/test/dave7j.pas +--- gpc-20060325/p/test/dave7j.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7j.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,12 @@ ++{$extended-pascal} ++ ++program comp (output); ++ ++ var c : Char; ++ ++begin ++ c := 'a'; ++ if c = 'ab' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7k.pas gpc-20070904/p/test/dave7k.pas +--- gpc-20060325/p/test/dave7k.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7k.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,7 @@ ++program comp (output); ++ ++begin ++ if '' = ' ' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7l.pas gpc-20070904/p/test/dave7l.pas +--- gpc-20060325/p/test/dave7l.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7l.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,9 @@ ++{$extended-pascal} ++ ++program comp (output); ++ ++begin ++ if '' = ' ' ++ then writeln ('OK') ++ else writeln ('failed') ++end. +diff -urN gpc-20060325/p/test/dave7m.pas gpc-20070904/p/test/dave7m.pas +--- gpc-20060325/p/test/dave7m.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7m.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var u : String (3); ++ ++begin ++ u := 'abc'; ++ if 'abcde' = u { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7n.pas gpc-20070904/p/test/dave7n.pas +--- gpc-20060325/p/test/dave7n.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7n.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,10 @@ ++program comp (output); ++ ++ var u : String (3); ++ ++begin ++ u := 'abc'; ++ if u = 'abcde' { WARN } ++ then writeln ('true') ++ else writeln ('false') ++end. +diff -urN gpc-20060325/p/test/dave7o.pas gpc-20070904/p/test/dave7o.pas +--- gpc-20060325/p/test/dave7o.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7o.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,14 @@ ++{$extended-pascal} ++ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ t : packed array [1..3] of char; ++ ++begin ++ s := 'abc'; ++ t := 'abc'; ++ if (s = 'abc') and not (s <> t) ++ then writeln ('OK') ++ else writeln ('failed') ++end. +diff -urN gpc-20060325/p/test/dave7p.pas gpc-20070904/p/test/dave7p.pas +--- gpc-20060325/p/test/dave7p.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/dave7p.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,15 @@ ++{$W-} ++ ++program comp (output); ++ ++ var s : packed array [1..4] of char; ++ t : packed array [1..3] of char; ++ u : String (3); ++ ++begin ++ s := 'abc'; ++ u := 'abc'; ++ if (s = 'abc') or not (s <> t) or ('abcde' = u) or (u = 'abcde') ++ then writeln ('failed') ++ else writeln ('OK') ++end. +diff -urN gpc-20060325/p/test/epstr1a.pas gpc-20070904/p/test/epstr1a.pas +--- gpc-20060325/p/test/epstr1a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/epstr1a.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,35 @@ ++{$extended-pascal} ++program epstr1a(Output); ++import GPC; ++var Dir : String(5); ++ BaseName : String(4); ++ Ext : String(2); ++begin ++ SetEnv('Fooo', 'bar'); ++ FSplit('foo.bar', Dir, BaseName, Ext); ++ if ++ IsSuffixCase('bar', 'Foobar') and ++ IsPrefixCase('Foo', 'Foobar') and ++ (not IsSuffix('Foo', 'Foobar')) and ++ (not IsPrefix('bar', 'Foobar')) and ++ (LastPosTillCase('bar', 'Foobar', 2) = 0) and ++ (PosFromCase('bar', 'Foobar', 2) = 4) and ++ (LastPosTill('bar', 'Foobarbar', 6) = 4) and ++ (PosFrom('bar', 'Foobarbar', 4) = 4) and ++ (LastPosCase('bar', 'Foobarbar') = 7) and ++ (PosCase('bar', 'Foobarbar') = 4) and ++ (LastPos('bar', 'Foobarbar') = 7) and ++ (Pos('bar', 'Foobarbar') = 4) and ++ (not StrEqualCase ('bar', 'Foobarbar')) and ++ (DataDirectoryName('', 'Foo') <> 'bar') and ++ (ConfigFileName('', 'Foo', true) <> 'bar') and ++ (FSearch('Foo', 'foobar') = '') and ++ (FSearchExecutable('Foo', 'foobar') = '') and ++ (FindNonQuotedStr('Foo', 'bazz', 1) = 0) and ++ FileNameMatch('*.*', 'Foo.bar') and ++ MultiFileNameMatch('*.*', 'Foo.bar') ++ then ++ writeln('OK') ++end ++. ++ +diff -urN gpc-20060325/p/test/fjf1009b.pas gpc-20070904/p/test/fjf1009b.pas +--- gpc-20060325/p/test/fjf1009b.pas 2005-01-21 18:59:00.000000000 +0100 ++++ gpc-20070904/p/test/fjf1009b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -1,5 +1,7 @@ + {$B+} { don't waste time with fjf226 kludges which are irrelevant here } + ++{$W-} { don't warn about trivial string comparisons } ++ + program fjf1009b; + + const +diff -urN gpc-20060325/p/test/fjf1102.pas gpc-20070904/p/test/fjf1102.pas +--- gpc-20060325/p/test/fjf1102.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/fjf1102.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,21 @@ ++program fjf1102 (Output); ++ ++var ++ a: ByteBool; ++ b: WordBool; ++ c: LongBool; ++ d, e, f: Boolean; ++ ++begin ++ a := ByteBool (42); ++ b := WordBool (1000); ++ c := LongBool ($10000); ++ d := a; ++ e := b; ++ f := c; ++ if (Ord (d) = 1) and (Ord (e) = 1) and (Ord (f) = 1) then ++ WriteLn ('OK') ++ else ++ WriteLn ('failed ', Ord (d), Ord (e), Ord (f)) ++end. ++ +diff -urN gpc-20060325/p/test/fjf1103.pas gpc-20070904/p/test/fjf1103.pas +--- gpc-20060325/p/test/fjf1103.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/fjf1103.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,19 @@ ++{ FLAG -W } ++ ++program fjf1103 (Output); ++ ++type ++ TString = String (100); ++ ++function f: TString; ++begin ++ f := 'OK' ++end; ++ ++var ++ s: TString = f; ++ ++begin ++ WriteLn (s) ++end. ++ +diff -urN gpc-20060325/p/test/fjf1104a.pas gpc-20070904/p/test/fjf1104a.pas +--- gpc-20060325/p/test/fjf1104a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/fjf1104a.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,16 @@ ++program fjf1104a (Output); ++ ++type ++ TString = String (100); ++ ++function f: TString; ++begin ++ f := 'OK this is not' ++end; ++ ++var ++ s: String (2) = f; ++ ++begin ++ WriteLn (s) ++end. +diff -urN gpc-20060325/p/test/fjf1104c.pas gpc-20070904/p/test/fjf1104c.pas +--- gpc-20060325/p/test/fjf1104c.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/fjf1104c.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,17 @@ ++program fjf1104c (Output); ++ ++type ++ s1 = set of 1 .. 100; ++ s2 = set of 0 .. 200; ++ ++function f: s1; ++begin ++ f := [1 .. 10, 20, 40] ++end; ++ ++var ++ s: s2 = f; ++ ++begin ++ if s = [20, 1 .. 10, 40] then WriteLn ('OK') else WriteLn ('failed') ++end. +diff -urN gpc-20060325/p/test/fjf1105.pas gpc-20070904/p/test/fjf1105.pas +--- gpc-20060325/p/test/fjf1105.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/fjf1105.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,47 @@ ++{$object-checking} ++ ++program fjf1105 (Output); ++ ++uses GPC; ++ ++type ++ px = ^tx; ++ tx = abstract object ++ procedure p; abstract; ++ end; ++ ++ py = ^ty; ++ ty = object (tx) ++ constructor c; ++ procedure p; virtual; ++ end; ++ ++constructor ty.c; ++begin ++end; ++ ++procedure ty.p; ++begin ++ WriteLn ('ty.p') ++end; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++var ++ a: px; ++ ++begin ++ AtExit (ExpectError); ++ a := New (py); ++ SetType (a^, TypeOf (a^)^.Parent); ++ a^.p ++end. +diff -urN gpc-20060325/p/test/fjf186.pas gpc-20070904/p/test/fjf186.pas +--- gpc-20060325/p/test/fjf186.pas 2005-01-19 15:23:19.000000000 +0100 ++++ gpc-20070904/p/test/fjf186.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -2,7 +2,7 @@ + var + f:text; + s:string(100); +- n:string(20)=ParamStr (1); { Idea how to solve this: let init_any() } ++ n:string(520)=ParamStr (1); { Idea how to solve this: let init_any() } + begin { generate code to do the initialization } + if n = '' then + begin +diff -urN gpc-20060325/p/test/fjf327.pas gpc-20070904/p/test/fjf327.pas +--- gpc-20060325/p/test/fjf327.pas 2005-02-23 07:09:05.000000000 +0100 ++++ gpc-20070904/p/test/fjf327.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -1,10 +1,10 @@ + program fjf327; + + var +- a : Cardinal = High (Cardinal) - 2; ++ a : CCardinal = High (CCardinal) - 2; + c : LongInt; + + begin + c := - a; +- if c = 2 - LongInt (High (Cardinal)) then writeln ('OK') else writeln ('failed ', c) ++ if c = 2 - LongInt (High (CCardinal)) then writeln ('OK') else writeln ('failed ', c) + end. +diff -urN gpc-20060325/p/test/fjf38.pas gpc-20070904/p/test/fjf38.pas +--- gpc-20060325/p/test/fjf38.pas 2002-10-31 03:45:21.000000000 +0100 ++++ gpc-20070904/p/test/fjf38.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -1,6 +1,6 @@ + Program fjf38; + +-{ FLAG --borland-pascal } ++{ FLAG --borland-pascal -w } + + Var + foo: Boolean; +diff -urN gpc-20060325/p/test/fjf38b.pas gpc-20070904/p/test/fjf38b.pas +--- gpc-20060325/p/test/fjf38b.pas 2002-10-31 03:45:21.000000000 +0100 ++++ gpc-20070904/p/test/fjf38b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -6,7 +6,7 @@ + foo: Boolean; + + begin +- foo:= '' = ' '; { Equal according to ISO, but ... } ++ foo:= {$local W-} '' = ' ' {$endlocal}; { Equal according to ISO, but ... } + if foo then + writeln ( 'failed' ) + else +diff -urN gpc-20060325/p/test/fjf38c.pas gpc-20070904/p/test/fjf38c.pas +--- gpc-20060325/p/test/fjf38c.pas 2002-10-31 03:45:21.000000000 +0100 ++++ gpc-20070904/p/test/fjf38c.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -1,6 +1,6 @@ + Program fjf38c (Output); + +-{ FLAG --extended-pascal --exact-compare-strings } ++{ FLAG --extended-pascal --exact-compare-strings -w } + + Var + foo: Boolean; +diff -urN gpc-20060325/p/test/fjf38e.pas gpc-20070904/p/test/fjf38e.pas +--- gpc-20060325/p/test/fjf38e.pas 2002-10-31 03:45:21.000000000 +0100 ++++ gpc-20070904/p/test/fjf38e.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -6,7 +6,7 @@ + foo: Boolean; + + begin +- foo:= '' = ' '; { Equal according to ISO, but ... } ++ foo:= {$local W-} '' = ' ' {$endlocal}; { Equal according to ISO, but ... } + if foo then + writeln ( 'failed' ) + else +diff -urN gpc-20060325/p/test/fjf395a.pas gpc-20070904/p/test/fjf395a.pas +--- gpc-20060325/p/test/fjf395a.pas 2003-04-24 13:05:26.000000000 +0200 ++++ gpc-20070904/p/test/fjf395a.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -42,7 +42,7 @@ + b##x := t < 42; if Ord (b##x) <> 0 then Error (#x + ' False 2'); + b##x := True; if Ord (b##x) <> 1 then Error (#x + ' True 1'); + b##x := t = 42; if Ord (b##x) <> 1 then Error (#x + ' True 2'); +- for a##x := Max (-999, Low (a##x)) to Min (999, High (a##x)) do ++ for a##x := 0 to 1 do + begin + b##x := t##x (a##x); + if b##x xor (a##x <> 0) then Error (#x + ' Value ' + Integer2String (a##x)); +diff -urN gpc-20060325/p/test/fjf395b.pas gpc-20070904/p/test/fjf395b.pas +--- gpc-20060325/p/test/fjf395b.pas 2005-01-05 03:22:21.000000000 +0100 ++++ gpc-20070904/p/test/fjf395b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -9,7 +9,6 @@ + td = MedBool; + te = LongBool; + tf = LongestBool; +- tg = Boolean attribute (Size = 1); + th = Boolean attribute (Size = 15); + ti = Boolean attribute (Size = 42); + tj = Boolean attribute (Size = 64); +@@ -20,7 +19,6 @@ + cd = MedCard; + ce = LongCard; + cf = LongestCard; +- cg = Cardinal attribute (Size = 1); + ch = Cardinal attribute (Size = 15); + ci = Cardinal attribute (Size = 42); + cj = Cardinal attribute (Size = 64); +@@ -32,7 +30,6 @@ + ad : MedInt; + ae : LongInt; + af : LongestInt; +- ag : Integer attribute (Size = 1); + ah : Integer attribute (Size = 15); + ai : Integer attribute (Size = 42); + aj : Integer attribute (Size = 64); +@@ -53,7 +50,7 @@ + b##x := t < 42; if Ord (b##x) <> 0 then Error (#x + ' False 2'); + b##x := True; if Ord (b##x) <> 1 then Error (#x + ' True 1'); + b##x := t = 42; if Ord (b##x) <> 1 then Error (#x + ' True 2'); +- for a##x := Max (-999, Low (a##x)) to Min (999, High (a##x)) do ++ for a##x := 0 to 1 do + begin + b##x := t##x (a##x); + if b##x xor (a##x <> 0) then Error (#x + ' Value ' + Integer2String (a##x)); +@@ -61,8 +58,6 @@ + end; + } + +-{$R-} +- + begin + TEST (a); + TEST (b); +@@ -70,7 +65,6 @@ + TEST (d); + TEST (e); + TEST (f); +- TEST (g); + TEST (h); + TEST (i); + TEST (j); +diff -urN gpc-20060325/p/test/fjf516b.pas gpc-20070904/p/test/fjf516b.pas +--- gpc-20060325/p/test/fjf516b.pas 2003-06-21 00:00:14.000000000 +0200 ++++ gpc-20070904/p/test/fjf516b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -56,6 +56,8 @@ + end + end; + ++{$W-} ++ + {$define EQ(a,b) T(a=b); F(a>b); T(a>=b); F(ab)} + {$define GT(a,b) F(a=b); T(a>b); T(a>=b); F(ab)} + {$define LT(a,b) F(a=b); F(a>b); F(a>=b); T(ab)} +diff -urN gpc-20060325/p/test/fjf526a.pas gpc-20070904/p/test/fjf526a.pas +--- gpc-20060325/p/test/fjf526a.pas 2005-01-05 01:56:39.000000000 +0100 ++++ gpc-20070904/p/test/fjf526a.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -5,7 +5,7 @@ + a, b: LongInt; + + begin +- b := 1 shl BitSizeOf (Integer) + 1; ++ b := 1 shl BitSizeOf (CInteger) + 1; + Rewrite (f, 1); + BlockWrite (f, a, SizeOf (a)); + Reset (f, 1); +diff -urN gpc-20060325/p/test/fjf526b.pas gpc-20070904/p/test/fjf526b.pas +--- gpc-20060325/p/test/fjf526b.pas 2005-01-05 01:56:47.000000000 +0100 ++++ gpc-20070904/p/test/fjf526b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -5,7 +5,7 @@ + a, b: LongInt; + + begin +- b := 1 shl BitSizeOf (Integer) + 1; ++ b := 1 shl BitSizeOf (CInteger) + 1; + Rewrite (f, 1); + BlockWrite (f, a, b and $ffffffff); + WriteLn ('OK') +diff -urN gpc-20060325/p/test/fjf636e.pas gpc-20070904/p/test/fjf636e.pas +--- gpc-20060325/p/test/fjf636e.pas 2003-01-11 15:23:13.000000000 +0100 ++++ gpc-20070904/p/test/fjf636e.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -71,16 +71,16 @@ + WriteLn ('failed 20 ', Name^, ' d') + else with TypeOf (C)^ do if Size <> 0 then + WriteLn ('failed 21 ', Size, ' ', 0) +- else if NegatedSize <> 0 then +- WriteLn ('failed 22 ', NegatedSize, ' ', 0) ++ else if NegatedSize <> -1 then ++ WriteLn ('failed 22 ', NegatedSize, ' ', -1) + else if Parent <> nil then + WriteLn ('failed 23 ', PtrInt (Parent), ' ', 0) + else if Name^ <> 'C' then + WriteLn ('failed 24 ', Name^, ' C') + else with TypeOf (Ee)^ do if Size <> 0 then + WriteLn ('failed 25 ', Size, ' ', 0) +- else if NegatedSize <> 0 then +- WriteLn ('failed 26 ', NegatedSize, ' ', 0) ++ else if NegatedSize <> -1 then ++ WriteLn ('failed 26 ', NegatedSize, ' ', -1) + else if Parent <> nil then + WriteLn ('failed 27 ', PtrInt (Parent), ' ', 0) + else if Name^ <> 'Ee' then +diff -urN gpc-20060325/p/test/fjf779a.pas gpc-20070904/p/test/fjf779a.pas +--- gpc-20060325/p/test/fjf779a.pas 2003-02-25 10:17:34.000000000 +0100 ++++ gpc-20070904/p/test/fjf779a.pas 1970-01-01 01:00:00.000000000 +0100 +@@ -1,9 +0,0 @@ +-{ FLAG -Wunused } +- +-program fjf779a; +- +-var +- a: String(10); { WARN } +- +-begin +-end. +diff -urN gpc-20060325/p/test/fjf779b.pas gpc-20070904/p/test/fjf779b.pas +--- gpc-20060325/p/test/fjf779b.pas 2003-02-25 10:16:43.000000000 +0100 ++++ gpc-20070904/p/test/fjf779b.pas 1970-01-01 01:00:00.000000000 +0100 +@@ -1,12 +0,0 @@ +-{ FLAG -Wunused } +- +-program fjf779b; +- +-type +- t (n: Integer) = Integer; +- +-var +- a: t (10); { WARN } +- +-begin +-end. +diff -urN gpc-20060325/p/test/fjf779d.pas gpc-20070904/p/test/fjf779d.pas +--- gpc-20060325/p/test/fjf779d.pas 2003-02-25 10:16:26.000000000 +0100 ++++ gpc-20070904/p/test/fjf779d.pas 1970-01-01 01:00:00.000000000 +0100 +@@ -1,9 +0,0 @@ +-{ FLAG -Wunused } +- +-program fjf779d; +- +-var +- a: set of 1 .. 10; { WARN } +- +-begin +-end. +diff -urN gpc-20060325/p/test/fjf779e.pas gpc-20070904/p/test/fjf779e.pas +--- gpc-20060325/p/test/fjf779e.pas 2003-02-25 10:18:29.000000000 +0100 ++++ gpc-20070904/p/test/fjf779e.pas 1970-01-01 01:00:00.000000000 +0100 +@@ -1,12 +0,0 @@ +-{ FLAG -Wunused } +- +-program fjf779e; +- +-type +- t = object end; +- +-var +- a: t; { WARN } +- +-begin +-end. +diff -urN gpc-20060325/p/test/fjf779f.pas gpc-20070904/p/test/fjf779f.pas +--- gpc-20060325/p/test/fjf779f.pas 2003-02-25 10:27:08.000000000 +0100 ++++ gpc-20070904/p/test/fjf779f.pas 1970-01-01 01:00:00.000000000 +0100 +@@ -1,11 +0,0 @@ +-{ FLAG -Wunused } +- +-program fjf779f; +- +-var +- a: record +- f: String (10) +- end; { WARN } +- +-begin +-end. +diff -urN gpc-20060325/p/test/fjf779g.pas gpc-20070904/p/test/fjf779g.pas +--- gpc-20060325/p/test/fjf779g.pas 2003-02-25 10:42:21.000000000 +0100 ++++ gpc-20070904/p/test/fjf779g.pas 1970-01-01 01:00:00.000000000 +0100 +@@ -1,9 +0,0 @@ +-{ FLAG -Wunused } +- +-program fjf779g; +- +-var +- a: array [1 .. 10] of String (10); { WARN } +- +-begin +-end. +diff -urN gpc-20060325/p/test/fjf873.pas gpc-20070904/p/test/fjf873.pas +--- gpc-20060325/p/test/fjf873.pas 2003-05-02 13:39:32.000000000 +0200 ++++ gpc-20070904/p/test/fjf873.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -1,3 +1,5 @@ ++{$W-} ++ + program fjf873; + + begin +diff -urN gpc-20060325/p/test/gale12a.pas gpc-20070904/p/test/gale12a.pas +--- gpc-20060325/p/test/gale12a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12a.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,27 @@ ++program rangecheck1; ++ ++uses GPC; ++ ++var i: 1..5; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ i:= 5; ++{$local R-} ++ i:= i+1; ++{$endlocal} ++ i:= 4; ++ i:= i+2; ++ WriteLn( 'i = ', i); ++end. +diff -urN gpc-20060325/p/test/gale12b.pas gpc-20070904/p/test/gale12b.pas +--- gpc-20060325/p/test/gale12b.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12b.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,29 @@ ++{ FLAG --range-checking } ++ ++program rangecheck1; ++ ++uses GPC; ++ ++var i: 1..5; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ i:= 5; ++{$local R-} ++ i:= i+1; ++{$endlocal} ++ i:= 4; ++ i:= i+2; ++ WriteLn( 'i = ', i); ++end. +diff -urN gpc-20060325/p/test/gale12c.pas gpc-20070904/p/test/gale12c.pas +--- gpc-20060325/p/test/gale12c.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12c.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,29 @@ ++{$R+} ++ ++program rangecheck2; ++ ++uses GPC; ++ ++var i: 1..5; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ i:= 5; ++{$local R-} ++ i:= i+1; ++{$endlocal} ++ i:= 4; ++ i:= i+2; ++ WriteLn( 'i = ', i); ++end. +diff -urN gpc-20060325/p/test/gale12d.pas gpc-20070904/p/test/gale12d.pas +--- gpc-20060325/p/test/gale12d.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12d.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,31 @@ ++{ FLAG --range-checking } ++ ++{$R+} ++ ++program rangecheck2; ++ ++uses GPC; ++ ++var i: 1..5; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ i:= 5; ++{$local R-} ++ i:= i+1; ++{$endlocal} ++ i:= 4; ++ i:= i+2; ++ WriteLn( 'i = ', i); ++end. +diff -urN gpc-20060325/p/test/gale12e.pas gpc-20070904/p/test/gale12e.pas +--- gpc-20060325/p/test/gale12e.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12e.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,13 @@ ++{$R+} ++ ++program rangecheck3; ++ ++var i: 1..5; ++ ++begin ++ i:= 5; ++{$local R-} ++ i:= i+1; ++{$endlocal} ++ if i = 6 then WriteLn ('OK') else WriteLn ('failed ', i) ++end. +diff -urN gpc-20060325/p/test/gale12f.pas gpc-20070904/p/test/gale12f.pas +--- gpc-20060325/p/test/gale12f.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12f.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,15 @@ ++{ FLAG --range-checking } ++ ++{$R+} ++ ++program rangecheck3; ++ ++var i: 1..5; ++ ++begin ++ i:= 5; ++{$local R-} ++ i:= i+1; ++{$endlocal} ++ if i = 6 then WriteLn ('OK') else WriteLn ('failed ', i) ++end. +diff -urN gpc-20060325/p/test/gale12g.pas gpc-20070904/p/test/gale12g.pas +--- gpc-20060325/p/test/gale12g.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12g.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,25 @@ ++{$R+} ++ ++program rangecheck4; ++ ++uses GPC; ++ ++var i: 1..5; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ i:= 4; ++ i:= i+2; ++ WriteLn( 'i = ', i); ++end. +diff -urN gpc-20060325/p/test/gale12h.pas gpc-20070904/p/test/gale12h.pas +--- gpc-20060325/p/test/gale12h.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/gale12h.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,27 @@ ++{ FLAG --range-checking } ++ ++{$R+} ++ ++program rangecheck4; ++ ++uses GPC; ++ ++var i: 1..5; ++ ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else ++ begin ++ WriteLn ('OK'); ++ Halt (0) {!} ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ i:= 4; ++ i:= i+2; ++ WriteLn( 'i = ', i); ++end. +diff -urN gpc-20060325/p/test/goto9c.pas gpc-20070904/p/test/goto9c.pas +--- gpc-20060325/p/test/goto9c.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/goto9c.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,21 @@ ++{$no-iso-goto-restrictions} ++{$W-} ++program goto9c; ++ ++ procedure p; ++ label ++ 10; ++ begin ++ if False then ++ begin ++ 10: ++ writeln('OK'); ++ Exit ++ end; ++ goto 10 ++ end; ++ ++begin ++ p; ++end ++. +diff -urN gpc-20060325/p/test/goto9d.pas gpc-20070904/p/test/goto9d.pas +--- gpc-20060325/p/test/goto9d.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/goto9d.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,20 @@ ++{$no-iso-goto-restrictions} ++program goto9c; ++ ++ procedure p; ++ label ++ 10; ++ begin ++ if False then ++ begin ++ 10: ++ writeln('OK'); ++ Exit ++ end; ++ goto 10 { WARN } ++ end; ++ ++begin ++ p; ++end ++. +diff -urN gpc-20060325/p/test/gpc_c_p.pas gpc-20070904/p/test/gpc_c_p.pas +--- gpc-20060325/p/test/gpc_c_p.pas 2006-02-18 14:23:04.000000000 +0100 ++++ gpc-20070904/p/test/gpc_c_p.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -42,14 +42,14 @@ + { External declarations we use from the C code } + + var +- CVariable: Integer; external name 'c_variable'; ++ CVariable: CInteger; external name 'c_variable'; + + procedure CRoutine; external name 'c_routine'; + + { Pascal code } + + var +- PascalProgramVariable: Integer = 17; attribute (name = 'pascal_program_variable'); ++ PascalProgramVariable: CInteger = 17; attribute (name = 'pascal_program_variable'); + + procedure PascalProgramRoutine; attribute (name = 'pascal_program_routine'); + begin +diff -urN gpc-20060325/p/test/gpc_c_u.pas gpc-20070904/p/test/gpc_c_u.pas +--- gpc-20060325/p/test/gpc_c_u.pas 2006-02-18 14:23:04.000000000 +0100 ++++ gpc-20070904/p/test/gpc_c_u.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -30,7 +30,7 @@ + interface + + var +- PascalUnitVariable: Integer = 42; attribute (name = 'pascal_unit_variable'); ++ PascalUnitVariable: CInteger = 42; attribute (name = 'pascal_unit_variable'); + + procedure PascalUnitRoutine; attribute (name = 'pascal_unit_routine'); + +diff -urN gpc-20060325/p/test/igor2.pas gpc-20070904/p/test/igor2.pas +--- gpc-20060325/p/test/igor2.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/igor2.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,43 @@ ++program igor2; ++ ++type ++ LinesInfoPtr = ^LinesInfoType; ++ LinesInfoType = array [0..99] of byte; ++ ++type ++ ++ EEPROMType = record ++ LinesInfo: byte; ++ end; ++ ++type ++ StoragePtr = ^StorageType; ++ StorageType = array [0..99] of byte; ++ ++type ++ EEPROMPtr = ^EEPROMType; ++ ++var ++ EEPROMStor: StoragePtr; ++ EEPROMData: EEPROMPtr absolute EEPROMStor; ++ ++function EEP ( W: byte): EEPROMPtr; ++ ++begin ++ EEP := EEPROMData ++end; ++ ++function EAdvLineInfo (Line: ShortWord): byte; ++begin ++ EAdvLineInfo := ++ LinesInfoPtr (EEP (EEPROMData^.LinesInfo))^ [Line]; ++end; ++ ++var store : array [0..99] of byte; ++{$W-} ++begin ++ store[0] := ord('O'); ++ EEPROMStor := StoragePtr(@(store[0])); ++ writeln (char(EAdvLineInfo (0)), 'K'); ++end. ++ +diff -urN gpc-20060325/p/test/range2.pas gpc-20070904/p/test/range2.pas +--- gpc-20060325/p/test/range2.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/range2.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,30 @@ ++program range2(input,output); ++ ++import GPC; ++type arange = 0..5; ++ ++var a,b : arange; ++ ErrFlag : boolean; ++procedure ExpectError; ++begin ++ if ExitCode = 0 then ++ WriteLn ('failed') ++ else begin ++ if ErrFlag then ++ WriteLn ('OK') ++ else ++ WriteLn ('failed'); ++ Halt (0) ++ end ++end; ++ ++begin ++ AtExit (ExpectError); ++ ErrFlag := false; ++ a:= 0; ++ b := max(a - 1, 0); { keep b in range } ++ ErrFlag := true; ++ { below b now really go out of range } ++ a := b - 1; ++end ++. +diff -urN gpc-20060325/p/test/roland2.pas gpc-20070904/p/test/roland2.pas +--- gpc-20060325/p/test/roland2.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/roland2.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,21 @@ ++program Roland2; ++ ++{$R-} { Range-checking prevented this instance of the bug in some GPC ++ versions as a side-effect, though the actual bug was still there. } ++ ++var ++ i: Integer value 0; ++ s: String (3); ++ c: array [1 .. 2] of String (3) = ('K', 'abc'); ++ ++function f: Integer; ++begin ++ Write ('O'); ++ Inc (i); ++ f := i ++end; ++ ++begin ++ s := c[f]; ++ WriteLn (s) ++end. +diff -urN gpc-20060325/p/test/russ5a.pas gpc-20070904/p/test/russ5a.pas +--- gpc-20060325/p/test/russ5a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/russ5a.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,8 @@ ++program russ5a; ++begin ++ if Paramstr( ParamCount ) = 'foo' then ++ begin ++ writeln('Quitting: output file "', Paramstr( ParamCount ), '" exists'); ++ break; { WRONG } ++ end; ++end. +diff -urN gpc-20060325/p/test/russ5b.pas gpc-20070904/p/test/russ5b.pas +--- gpc-20060325/p/test/russ5b.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/russ5b.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,8 @@ ++program russ5b; ++begin ++ if Paramstr( ParamCount ) = 'foo' then ++ begin ++ writeln('Quitting: output file "', Paramstr( ParamCount ), '" exists'); ++ continue; { WRONG } ++ end; ++end. +diff -urN gpc-20060325/p/test/shl.pas gpc-20070904/p/test/shl.pas +--- gpc-20060325/p/test/shl.pas 2002-09-23 09:39:12.000000000 +0200 ++++ gpc-20070904/p/test/shl.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -1,14 +1,14 @@ + program ShlTest; + + var +- a: Integer = 1; ++ a: CInteger = 1; + i: LongestInt; + + begin + +- i := 1 shl (BitSizeOf (Integer) + 3); ++ i := 1 shl (BitSizeOf (CInteger) + 3); + if i <= 0 then begin WriteLn ('failed a1'); Halt end; +- if i shr (BitSizeOf (Integer) + 3) <> 1 then begin WriteLn ('failed a2'); Halt end; ++ if i shr (BitSizeOf (CInteger) + 3) <> 1 then begin WriteLn ('failed a2'); Halt end; + + i := 1 shl (BitSizeOf (MedInt) - 2); + if i <= 0 then begin WriteLn ('failed a3'); Halt end; +@@ -18,9 +18,9 @@ + if i <= 0 then begin WriteLn ('failed a5'); Halt end; + if i <> $10000000000 then begin WriteLn ('failed a6'); Halt end; + +- i := a shl (BitSizeOf (Integer) + 3); ++ i := a shl (BitSizeOf (CInteger) + 3); + if i <= 0 then begin WriteLn ('failed b1'); Halt end; +- if i shr (BitSizeOf (Integer) + 3) <> 1 then begin WriteLn ('failed b2'); Halt end; ++ if i shr (BitSizeOf (CInteger) + 3) <> 1 then begin WriteLn ('failed b2'); Halt end; + + i := a shl (BitSizeOf (MedInt) - 2); + if i <= 0 then begin WriteLn ('failed b3'); Halt end; +diff -urN gpc-20060325/p/test/stro2.pas gpc-20070904/p/test/stro2.pas +--- gpc-20060325/p/test/stro2.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/stro2.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,5 @@ ++program stro2; ++begin ++ write(StringOf('')); ++ writeln('OK') ++end. +diff -urN gpc-20060325/p/test/test_run gpc-20070904/p/test/test_run +--- gpc-20060325/p/test/test_run 2006-03-03 20:14:32.000000000 +0100 ++++ gpc-20070904/p/test/test_run 2007-09-04 08:22:55.000000000 +0200 +@@ -14,7 +14,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +@@ -306,7 +306,7 @@ + + echo "Test Run By ${USER:-$LOGNAME} on `date '+%Y-%m-%d %H:%M:%S'`" + echo "Native configuration is `$PC $PFLAGS -dumpmachine` (`hostname || echo 'unknown host'`)" +-echo "$PC `$PC $PFLAGS -dumpversion`, flags: $PFLAGS_NO_PATHS `if [ x"$GP" != x ]; then echo "(using GP)"; fi`" ++echo "$PC `$PC $PFLAGS -dumpversion`, flags: $PFLAGS_NO_PATHS `if [ x"$GP" != x ]; then echo '(using GP)'; fi`" + echo "GPC-TEST-BEGIN" + echo "==========================" + if [ $progress_msg = y ]; then +diff -urN gpc-20060325/p/test/test_sum gpc-20070904/p/test/test_sum +--- gpc-20060325/p/test/test_sum 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/test/test_sum 2007-09-04 08:22:55.000000000 +0200 +@@ -11,7 +11,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/test/todo/fjf1104b.pas gpc-20070904/p/test/todo/fjf1104b.pas +--- gpc-20060325/p/test/todo/fjf1104b.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf1104b.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,17 @@ ++program fjf1104b (Output); ++ ++type ++ MyString (i: Integer) = packed array [1 .. i] of Char; ++ TString = MyString (100); ++ ++function f: TString; ++begin ++ f := 'OK this is not' ++end; ++ ++var ++ s: MyString (2) = f; ++ ++begin ++ WriteLn (s) ++end. +diff -urN gpc-20060325/p/test/todo/fjf1104d.pas gpc-20070904/p/test/todo/fjf1104d.pas +--- gpc-20060325/p/test/todo/fjf1104d.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf1104d.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,22 @@ ++program fjf1104d (Output); ++ ++procedure p; ++ ++type ++ TString = String (100); ++ ++function f: TString; ++begin ++ f := 'OK this is not' ++end; ++ ++var ++ s: String (2) = f; ++ ++begin ++ WriteLn (s) ++end; ++ ++begin ++ p ++end. +diff -urN gpc-20060325/p/test/todo/fjf1104e.pas gpc-20070904/p/test/todo/fjf1104e.pas +--- gpc-20060325/p/test/todo/fjf1104e.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf1104e.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,23 @@ ++program fjf1104e (Output); ++ ++procedure p; ++ ++type ++ MyString (i: Integer) = packed array [1 .. i] of Char; ++ TString = MyString (100); ++ ++function f: TString; ++begin ++ f := 'OK this is not' ++end; ++ ++var ++ s: MyString (2) = f; ++ ++begin ++ WriteLn (s) ++end; ++ ++begin ++ p ++end. +diff -urN gpc-20060325/p/test/todo/fjf1104f.pas gpc-20070904/p/test/todo/fjf1104f.pas +--- gpc-20060325/p/test/todo/fjf1104f.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf1104f.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,23 @@ ++program fjf1104f (Output); ++ ++procedure p; ++ ++type ++ s1 = set of 1 .. 100; ++ s2 = set of 0 .. 200; ++ ++function f: s1; ++begin ++ f := [1 .. 10, 20, 40] ++end; ++ ++var ++ s: s2 = f; ++ ++begin ++ if s = [20, 1 .. 10, 40] then WriteLn ('OK') else WriteLn ('failed') ++end; ++ ++begin ++ p ++end. +diff -urN gpc-20060325/p/test/todo/fjf1104g.pas gpc-20070904/p/test/todo/fjf1104g.pas +--- gpc-20060325/p/test/todo/fjf1104g.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf1104g.pas 2007-09-04 08:27:40.000000000 +0200 +@@ -0,0 +1,22 @@ ++program fjf1104e (Output); ++ ++procedure p; ++ ++type ++ TString = packed array [1 .. 100] of Char; ++ ++function f: TString; ++begin ++ f := 'OK this is not' ++end; ++ ++var ++ s: packed array [1 ..2] of Char = f; ++ ++begin ++ WriteLn (s) ++end; ++ ++begin ++ p ++end. +diff -urN gpc-20060325/p/test/todo/fjf779a.pas gpc-20070904/p/test/todo/fjf779a.pas +--- gpc-20060325/p/test/todo/fjf779a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf779a.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,9 @@ ++{ FLAG -Wunused } ++ ++program fjf779a; ++ ++var ++ a: String(10); { WARN } ++ ++begin ++end. +diff -urN gpc-20060325/p/test/todo/fjf779b.pas gpc-20070904/p/test/todo/fjf779b.pas +--- gpc-20060325/p/test/todo/fjf779b.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf779b.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,12 @@ ++{ FLAG -Wunused } ++ ++program fjf779b; ++ ++type ++ t (n: Integer) = Integer; ++ ++var ++ a: t (10); { WARN } ++ ++begin ++end. +diff -urN gpc-20060325/p/test/todo/fjf779d.pas gpc-20070904/p/test/todo/fjf779d.pas +--- gpc-20060325/p/test/todo/fjf779d.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf779d.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,9 @@ ++{ FLAG -Wunused } ++ ++program fjf779d; ++ ++var ++ a: set of 1 .. 10; { WARN } ++ ++begin ++end. +diff -urN gpc-20060325/p/test/todo/fjf779e.pas gpc-20070904/p/test/todo/fjf779e.pas +--- gpc-20060325/p/test/todo/fjf779e.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf779e.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,12 @@ ++{ FLAG -Wunused } ++ ++program fjf779e; ++ ++type ++ t = object end; ++ ++var ++ a: t; { WARN } ++ ++begin ++end. +diff -urN gpc-20060325/p/test/todo/fjf779f.pas gpc-20070904/p/test/todo/fjf779f.pas +--- gpc-20060325/p/test/todo/fjf779f.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf779f.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,11 @@ ++{ FLAG -Wunused } ++ ++program fjf779f; ++ ++var ++ a: record ++ f: String (10) ++ end; { WARN } ++ ++begin ++end. +diff -urN gpc-20060325/p/test/todo/fjf779g.pas gpc-20070904/p/test/todo/fjf779g.pas +--- gpc-20060325/p/test/todo/fjf779g.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/todo/fjf779g.pas 2007-09-04 08:22:54.000000000 +0200 +@@ -0,0 +1,9 @@ ++{ FLAG -Wunused } ++ ++program fjf779g; ++ ++var ++ a: array [1 .. 10] of String (10); { WARN } ++ ++begin ++end. +diff -urN gpc-20060325/p/test/velo1.pas gpc-20070904/p/test/velo1.pas +--- gpc-20060325/p/test/velo1.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/velo1.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,14 @@ ++program stringtest; ++ ++type ++ record_with_empty_string = record ++ empty_string : string(127) VALUE ''; ++ end; ++ some_records_with_empty_string(length : integer) = array[1..length] of ++ record_with_empty_string; ++ five_records_with_empty_string = some_records_with_empty_string(5); ++var fr : five_records_with_empty_string; ++begin ++ writeln(fr[4].empty_string, 'OK') ++end. ++ +diff -urN gpc-20060325/p/test/vol1a.pas gpc-20070904/p/test/vol1a.pas +--- gpc-20060325/p/test/vol1a.pas 1970-01-01 01:00:00.000000000 +0100 ++++ gpc-20070904/p/test/vol1a.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -0,0 +1,22 @@ ++program vol1; ++{ Just naive test that volatile is accepted } ++type ++ VolatileChar = char attribute (volatile); ++ VideoMemory = ^VolatileChar; ++ ++procedure p(v : VideoMemory); ++begin ++ write(v^) ++end; ++ ++var VideoMemoryVar : VideoMemory; ++ ++begin ++ new(VideoMemoryVar); ++ VideoMemoryVar^ := 'O'; ++ p(VideoMemoryVar); ++ VideoMemoryVar^ := 'K'; ++ p(VideoMemoryVar); ++ writeln ++end ++. +diff -urN gpc-20060325/p/typecheck.c gpc-20070904/p/typecheck.c +--- gpc-20060325/p/typecheck.c 2006-03-24 03:47:15.000000000 +0100 ++++ gpc-20070904/p/typecheck.c 2007-09-04 08:22:53.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -47,7 +47,11 @@ + static void really_start_incremental_init (tree); + static void push_init_level (void); + static tree build_bitfields_type (tree, int); ++#ifndef GCC_4_1 + static tree do_build_constructor_rev (tree, tree); ++#else ++static tree do_build_constructor_rev (tree, VEC(constructor_elt,gc) *); ++#endif + static tree fill_one_record (tree *, tree, tree, tree *, HOST_WIDE_INT, HOST_WIDE_INT *); + static tree fake_packed_array_constructor (void); + static tree pop_init_level (void); +@@ -569,6 +573,7 @@ + && TREE_CONSTANT (DECL_INITIAL (decl)) + /* Check for cases where this is sub-optimal, even though valid. */ + && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR ++ && TREE_CODE (DECL_INITIAL (decl)) != PASCAL_SET_CONSTRUCTOR + && DECL_MODE (decl) != BLKmode) + return DECL_INITIAL (decl); + return decl; +@@ -645,7 +650,8 @@ + return build (COMPOUND_EXPR, TREE_TYPE (op1), TREE_OPERAND (exp, 0), op1); + } + +- if (!lvalue_p (exp) && !(TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)) ++ if (!lvalue_p (exp) ++ && !(TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)) + && !((TREE_CODE (exp) == NOP_EXPR + #ifdef EGCS97 + || TREE_CODE (exp) == VIEW_CONVERT_EXPR +@@ -921,7 +927,7 @@ + } + else + { +- if (TREE_CODE (val) == CONSTRUCTOR) ++ if (TREE_CODE (val) == PASCAL_SET_CONSTRUCTOR) + /* Convert the set constructor to the corresponding set type */ + #if 0 + val = construct_set (val, type, 2); +@@ -929,7 +935,7 @@ + /* fjf880.pas */ + { + tree temp = make_new_variable ("set_parameter", partype); +- if (!CONSTRUCTOR_ELTS (val)) ++ if (!SET_CONSTRUCTOR_ELTS (val)) + { + construct_set (val, temp, 0); + val = temp; +@@ -1058,6 +1064,7 @@ + && ((TYPE_READONLY (TREE_TYPE (type)) + && (TREE_CODE (val) == STRING_CST + || TREE_CODE (val) == CONSTRUCTOR ++ || TREE_CODE (val) == PASCAL_SET_CONSTRUCTOR + || !lvalue_p (val) + || ((PASCAL_TYPE_STRING (TREE_TYPE (type)) || TREE_CODE (TREE_TYPE (type)) == VOID_TYPE) + && (TREE_CODE (TREE_TYPE (val)) == CHAR_TYPE +@@ -1076,7 +1083,8 @@ + TYPE_READONLY (TREE_TYPE (type)), + TYPE_VOLATILE (TREE_TYPE (type)))); + } +- else if (TREE_CODE (val) == CONSTRUCTOR && TREE_CODE (TREE_TYPE (val)) == SET_TYPE) ++ else if (TREE_CODE (val) == PASCAL_SET_CONSTRUCTOR ++ && TREE_CODE (TREE_TYPE (val)) == SET_TYPE) + val = construct_set (val, NULL_TREE, 0); + else if (TREE_CODE (val) == FUNCTION_DECL) + val = build_routine_call (val, NULL_TREE); +@@ -1927,8 +1935,11 @@ + if (integer_zerop (capacity)) + TREE_VALUE (init) = empty_string_node; + else if (TREE_CODE (TREE_VALUE (init)) == STRING_CST) ++ { + TREE_VALUE (init) = build_string_constant (TREE_STRING_POINTER (TREE_VALUE (init)), + TREE_INT_CST_LOW (capacity), PASCAL_CST_FRESH (TREE_VALUE (init))); ++ set_string_length (TREE_VALUE (init), 0, TREE_INT_CST_LOW (capacity) + 1); ++ } + else + { + /* We can't get here with char constants! */ +@@ -1938,6 +1949,10 @@ + } + string_length = capacity; + } ++ else if (TREE_CODE (TREE_VALUE (init)) == STRING_CST) ++ { ++ set_string_length (TREE_VALUE (init), 0, TREE_INT_CST_LOW (capacity) + 1); ++ } + else if (TREE_CODE (TREE_TYPE (TREE_VALUE (init))) == CHAR_TYPE) + /* convert char to string: [1: char-value; 2 .. Capacity + 1: Chr (0)] */ + TREE_VALUE (init) = tree_cons (build_tree_list (integer_one_node, NULL_TREE), TREE_VALUE (init), +@@ -2021,17 +2036,51 @@ + return 0; + } + /* Pointers to strings used as CStrings. */ ++#if 1 ++ if (TREE_CODE (TREE_VALUE (init)) == ADDR_EXPR) ++ { ++ tree s = TREE_OPERAND (TREE_VALUE (init), 0); ++ if (TREE_CODE (s) == VAR_DECL && TREE_READONLY (s) ++ && DECL_INITIAL (s) ++ && TREE_CODE (DECL_INITIAL (s)) == CONSTRUCTOR ++ && PASCAL_TYPE_DISCRIMINATED_STRING ( ++ TREE_TYPE (DECL_INITIAL (s)))) ++ { ++ int constant = TREE_CONSTANT (TREE_VALUE (init)); ++#ifndef GCC_4_1 ++ tree t = CONSTRUCTOR_ELTS (DECL_INITIAL (s)); ++ TREE_VALUE (init) = build1 (ADDR_EXPR, cstring_type_node, ++ TREE_VALUE (TREE_CHAIN (TREE_CHAIN (t)))); ++#else ++ VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS ( ++ DECL_INITIAL (s)); ++ TREE_VALUE (init) = build1 (ADDR_EXPR, cstring_type_node, ++ VEC_index (constructor_elt, elts, 2)->value); ++#endif ++ TREE_CONSTANT (TREE_VALUE (init)) = constant; ++ return 0; ++ } ++ } ++#else + if (TREE_CODE (TREE_VALUE (init)) == ADDR_EXPR + && TREE_CODE (TREE_OPERAND (TREE_VALUE (init), 0)) == CONSTRUCTOR + && PASCAL_TYPE_DISCRIMINATED_STRING (TREE_TYPE (TREE_OPERAND (TREE_VALUE (init), 0)))) + { + int constant = TREE_CONSTANT (TREE_VALUE (init)); ++#ifndef GCC_4_1 + tree t = CONSTRUCTOR_ELTS (TREE_OPERAND (TREE_VALUE (init), 0)); + TREE_VALUE (init) = build1 (ADDR_EXPR, cstring_type_node, + TREE_VALUE (TREE_CHAIN (TREE_CHAIN (t)))); ++#else ++ VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS ( ++ TREE_OPERAND (TREE_VALUE (init), 0)); ++ TREE_VALUE (init) = build1 (ADDR_EXPR, cstring_type_node, ++ VEC_index (constructor_elt, elts, 2)->value); ++#endif + TREE_CONSTANT (TREE_VALUE (init)) = constant; + return 0; + } ++#endif + } + + /* Procedural variables. (Pointers to routines should cause no problems.) */ +@@ -2049,14 +2098,14 @@ + } + + /* Sets. */ +- if (TREE_CODE (TREE_VALUE (init)) == CONSTRUCTOR ++ if (TREE_CODE (TREE_VALUE (init)) == PASCAL_SET_CONSTRUCTOR + && TREE_CODE (TREE_TYPE (TREE_VALUE (init))) == SET_TYPE + && TREE_CODE (type) == SET_TYPE + && TREE_TYPE (TREE_VALUE (init)) == empty_set_type_node) + { + /* The type of the set constructor was not known to the parser. + Specify it now, but check it first. */ +- tree elements = CONSTRUCTOR_ELTS (TREE_VALUE (init)); ++ tree elements = SET_CONSTRUCTOR_ELTS (TREE_VALUE (init)); + if (elements && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_PURPOSE (elements))), + TYPE_MAIN_VARIANT (TREE_TYPE (type)))) + return 1; +@@ -2607,11 +2656,15 @@ + tree t = re_fold (TYPE_LANG_INITIAL (type), + TYPE_MAIN_VARIANT (type_template), fix_list, &dummy); + CHK_EM (t); ++#if 0 ++ /* The check is useless (we already checked the initializer) ++ and harmful (velo1.pas) */ + if (check_pascal_initializer (type, t)) + { + error ("initial value of discriminated schema type is of wrong type"); + t = error_mark_node; + } ++#endif + TYPE_LANG_INITIAL (type) = t; + } + +@@ -2784,6 +2837,9 @@ + break; + + case CONSTRUCTOR: ++#ifdef GCC_4_1 ++ case PASCAL_SET_CONSTRUCTOR: ++#endif + TREE_ADDRESSABLE (x) = 1; + return 1; + +@@ -2932,10 +2988,13 @@ + so the usual warnings are not appropriate. */ + if (TREE_CODE (ttr) != FUNCTION_TYPE && TREE_CODE (ttl) != FUNCTION_TYPE) + { ++#if 0 + if (!TYPE_READONLY (ttl) && TYPE_READONLY (ttr)) + assignment_error_or_warning ("%s discards `const' from pointer target type", + errtype, fundecl, parmnum, 0); +- else if (!TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr)) ++ else ++#endif ++ if (!TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr)) + assignment_error_or_warning ("%s discards `volatile' from pointer target type", + errtype, fundecl, parmnum, 0); + else if (TREE_CODE (ttl) == INTEGER_TYPE && TREE_CODE (ttr) == INTEGER_TYPE) +@@ -3090,7 +3149,7 @@ + } + else + { +- warning (msg, opname); ++ gpc_warning (msg, opname); + if (name) + warning_with_decl (fundecl, " routine declaration"); + } +@@ -3516,7 +3575,11 @@ + /* If we are saving up the elements rather than allocating them, + this is the list of elements so far (in reverse order, + most recent first). */ ++#ifndef GCC_4_1 + static tree constructor_elements; ++#else ++static VEC(constructor_elt,gc) *constructor_elements; ++#endif + + /* 1 if so far this constructor's elements are all compile-time constants. */ + static int constructor_constant; +@@ -3550,7 +3613,11 @@ + tree max_index; + tree unfilled_index; + tree unfilled_fields; ++#ifndef GCC_4_1 + tree elements; ++#else ++ VEC(constructor_elt,gc) *elements; ++#endif + int offset; + tree pending_elts; + int depth; +@@ -3762,7 +3829,11 @@ + return NULL_TREE; /* avoid further error messages */ + gcc_assert (TREE_CODE (init) == TREE_LIST); + ++#ifndef GCC_4_1 + constructor_elements = NULL_TREE; ++#else ++ constructor_elements = NULL; ++#endif + constructor_stack = 0; + spelling_base = 0; + spelling_size = 0; +@@ -3881,7 +3952,11 @@ + constructor_constant = 1; + constructor_simple = 1; + constructor_depth = SPELLING_DEPTH (); ++#ifndef GCC_4_1 + constructor_elements = NULL_TREE; ++#else ++ constructor_elements = NULL; ++#endif + constructor_pending_elts = NULL_TREE; + + /* Don't die if an entire brace-pair level is superfluous in the containing level. */ +@@ -3963,10 +4038,19 @@ + return type; + } + ++#ifndef GCC_4_1 + static tree + do_build_constructor_rev (tree type, tree el) ++#else ++static tree ++do_build_constructor_rev (tree type, VEC(constructor_elt,gc) *el) ++#endif + { ++#ifndef GCC_4_1 + tree constructor = build_constructor (type, nreverse (el)); ++#else ++ tree constructor = build_constructor (type, el); ++#endif + if (constructor_constant) + { + TREE_CONSTANT (constructor) = 1; +@@ -3982,7 +4066,11 @@ + static tree + fill_one_record (tree *pel, tree min, tree ptype, tree *fields, HOST_WIDE_INT maxnr, HOST_WIDE_INT *pnr) + { ++#ifndef GCC_4_1 + tree prl = NULL_TREE; ++#else ++ VEC(constructor_elt,gc) * prl = NULL; ++#endif + tree el = *pel; + HOST_WIDE_INT oanr = 0; + int first = 1; +@@ -4003,7 +4091,8 @@ + } + if (anr != oanr) + break; +- prl = tree_cons (fields[nr], TREE_VALUE (el), prl); ++ ++ CONSTRUCTOR_APPEND_ELT (prl, fields[nr], TREE_VALUE (el)); + el = TREE_CHAIN (el); + *pel = el; + } +@@ -4013,11 +4102,35 @@ + static tree + fake_packed_array_constructor (void) + { +- tree rtype = NULL_TREE, rfields = NULL_TREE, rl = NULL_TREE; +- tree type = constructor_type, el = nreverse (constructor_elements); +- tree tsize = pascal_array_type_nelts (type), orig_el = el; ++ tree rtype = NULL_TREE, rfields = NULL_TREE; ++ tree type = constructor_type; ++#ifndef GCC_4_1 ++ tree rl = NULL_TREE; ++ tree el = nreverse (constructor_elements); ++#else ++ VEC(constructor_elt,gc) * rl = NULL; ++ tree el = NULL_TREE; ++#endif ++ tree tsize = pascal_array_type_nelts (type), orig_el; + HOST_WIDE_INT size = TREE_INT_CST_LOW (tsize), asize = size / BITS_PER_UNIT; + int psize = size % BITS_PER_UNIT; ++ ++#ifdef GCC_4_1 ++ { ++ VEC(constructor_elt,gc) *elts = constructor_elements; ++ unsigned HOST_WIDE_INT ix; ++ ix = VEC_length (constructor_elt, elts); ++ while (ix > 0) ++ { ++ ix--; ++ el = tree_cons (VEC_index (constructor_elt, elts, ix)->index, ++ VEC_index (constructor_elt, elts, ix)->value, el); ++ } ++ } ++#endif ++ ++ orig_el = el; ++ + if (size <= 0 || TREE_INT_CST_HIGH (tsize)) + { + error ("array too large"); +@@ -4027,7 +4140,12 @@ + { + tree ptype = build_bitfields_type (TREE_TYPE (type), BITS_PER_UNIT); + tree fields[BITS_PER_UNIT]; +- tree atype, arfield, al = NULL_TREE, t; ++ tree atype, arfield, t; ++#ifndef GCC_4_1 ++ tree al = NULL_TREE; ++#else ++ VEC(constructor_elt,gc) * al = NULL; ++#endif + int i; + for (i = 0, t = TYPE_FIELDS (ptype); i < BITS_PER_UNIT; i++, t = TREE_CHAIN (t)) + fields[i] = t; +@@ -4040,10 +4158,12 @@ + tree br = fill_one_record (&el, TYPE_MIN_VALUE (TYPE_DOMAIN (type)), ptype, fields, asize, &anr); + if (!br) + break; +- al = tree_cons (build_int_2 (anr, 0), br, al); ++ ++ CONSTRUCTOR_APPEND_ELT (al, build_int_2 (anr, 0), br); + } + if (al) +- rl = build_tree_list (arfield, do_build_constructor_rev (atype, al)); ++ CONSTRUCTOR_APPEND_ELT (rl, arfield, ++ do_build_constructor_rev (atype, al)); + } + if (psize) + { +@@ -4063,7 +4183,7 @@ + HOST_WIDE_INT anr; + tree pr1 = fill_one_record (&el, TYPE_MIN_VALUE (TYPE_DOMAIN (type)), ptype1, fields1, asize + 1, &anr); + if (pr1) +- rl = tree_cons (prfield, pr1, rl); ++ CONSTRUCTOR_APPEND_ELT (rl, prfield, pr1); + } + } + gcc_assert (!el); +@@ -4116,8 +4236,12 @@ + { + /* A scalar initializer -- just return the element, after + verifying there is just one. */ ++#ifndef GCC_4_1 + gcc_assert (constructor_elements && !TREE_CHAIN (constructor_elements)); + constructor = TREE_VALUE (constructor_elements); ++#else ++ gcc_unreachable (); ++#endif + } + else + { +@@ -4139,7 +4263,12 @@ + && count_bits (TREE_TYPE (constructor_type), NULL)) + constructor = fake_packed_array_constructor (); + else ++#ifndef GCC_4_1 + constructor = build_constructor (constructor_type, nreverse (constructor_elements)); ++#else ++ constructor = build_constructor (constructor_type, ++ constructor_elements); ++#endif + if (constructor_constant) + { + TREE_CONSTANT (constructor) = 1; +@@ -4379,8 +4508,10 @@ + { + /* Otherwise, output this element to constructor_elements. */ + if (!duplicate) +- constructor_elements = tree_cons (field, +- digest_init (type, value, require_constant_value), constructor_elements); ++ { ++ value = digest_init (type, value, require_constant_value); ++ CONSTRUCTOR_APPEND_ELT (constructor_elements, field, value); ++ } + + /* Advance the variable that indicates sequential elements output. */ + if (TREE_CODE (constructor_type) == ARRAY_TYPE) +diff -urN gpc-20060325/p/types.c gpc-20070904/p/types.c +--- gpc-20060325/p/types.c 2006-03-24 03:47:15.000000000 +0100 ++++ gpc-20070904/p/types.c 2007-09-04 08:22:53.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -82,7 +82,7 @@ + if (TYPE_LANG_CODE_TEST (type, PASCAL_LANG_ABSTRACT_OBJECT)) + error ("abstract object type declared as function result type"); + else if (co->warn_object_assignment) +- warning ("object type declared as function result type"); ++ gpc_warning ("object type declared as function result type"); + } + if (!SCALAR_TYPE (TREE_CODE (type))) + chk_dialect ("structured function result types are", NOT_CLASSIC_PASCAL); +@@ -281,7 +281,7 @@ + && TREE_CODE (upper) == INTEGER_CST + && tree_int_cst_lt (upper, lower)) + { +- warning ("set constructor range is empty"); ++ gpc_warning ("set constructor range is empty"); + *pres = TREE_CHAIN (m); + continue; + } +@@ -307,8 +307,8 @@ + /* A single element/range with side-effects should be safe. */ + if (side_effects && TREE_CHAIN (elements)) + { +- warning ("expressions with side-effects in set constructors are"); +- warning (" problematic since evaluation is implementation-dependent"); ++ gpc_warning ("expressions with side-effects in set constructors are"); ++ gpc_warning (" problematic since evaluation is implementation-dependent"); + } + /* Sort and merge constant constructor elements */ + if (is_intcst && n) +@@ -338,9 +338,9 @@ + i = j; + } + } +- t = make_node (CONSTRUCTOR); ++ t = make_node (PASCAL_SET_CONSTRUCTOR); + TREE_TYPE (t) = empty_set_type_node; /* real type not yet known */ +- CONSTRUCTOR_ELTS (t) = elements; ++ SET_CONSTRUCTOR_ELTS (t) = elements; + TREE_CONSTANT (t) = TREE_STATIC (t) = is_constant; + #ifdef GCC_4_0 + TREE_INVARIANT (t) = is_constant; +@@ -355,10 +355,10 @@ + limited_set (tree lo) + { + tree hi = fold (build_pascal_binary_op (PLUS_EXPR, lo, size_int (co->set_limit - 1))); +- warning ("constructing limited integer set `%li .. %li';", ++ gpc_warning ("constructing limited integer set `%li .. %li';", + (long int) TREE_INT_CST_LOW (lo), + (long int) TREE_INT_CST_LOW (hi)); +- warning (" use `--setlimit=NUMBER' to change the size limit at compile time."); ++ gpc_warning (" use `--setlimit=NUMBER' to change the size limit at compile time."); + return hi; + } + +@@ -384,7 +384,7 @@ + tree elements, elem, set_low, set_high, setsize, this_set_type; + tree nelem; + CHK_EM (constructor); +- elements = CONSTRUCTOR_ELTS (constructor); ++ elements = SET_CONSTRUCTOR_ELTS (constructor); + if (!elements && (arg_type == 0 || (arg_type == 1 && !target_or_type))) + { + if (arg_type == 0 && target_or_type) +@@ -511,7 +511,7 @@ + nelem = tree_cons (lo2, hi2, nelem); + } + nelem = nreverse (nelem); +- CONSTRUCTOR_ELTS (constructor) = nelem; ++ SET_CONSTRUCTOR_ELTS (constructor) = nelem; + return constructor; + } + +@@ -1485,6 +1485,7 @@ + are handled differently above, anyway.) */ + TYPE_PRECISION (type) = ((TREE_INT_CST_LOW (bits) + BITS_PER_UNIT - 1) + / BITS_PER_UNIT) * BITS_PER_UNIT; ++ TYPE_ALIGN (type) = 0; + layout_type (type); + } + } +@@ -1530,7 +1531,15 @@ + int bits = 0; + unsigned HOST_WIDE_INT c; + if (TREE_CODE (t) != INTEGER_CST) +- return TYPE_PRECISION (TREE_TYPE (t)) - !TYPE_UNSIGNED (TREE_TYPE (t)); ++ { ++ int dummy; ++ tree tbits = count_bits(TREE_TYPE (t), &dummy); ++ if (!tbits) ++ return TYPE_PRECISION (TREE_TYPE (t)) ++ - !TYPE_UNSIGNED (TREE_TYPE (t)); ++ else ++ return TREE_INT_CST_LOW (tbits); ++ } + if (tree_int_cst_sgn (t) >= 0) + { + c = TREE_INT_CST_HIGH (t); +@@ -1800,7 +1809,7 @@ + if (TREE_CODE (l) != INTEGER_CST || TREE_CODE (h) != INTEGER_CST || const_lt (h, l)) + { + if (co->warn_dynamic_arrays) +- warning ("dynamic array"); ++ gpc_warning ("dynamic array"); + if (current_function_decl) /* @@ otherwise do it in module constructor */ + expand_expr_stmt (build (COND_EXPR, pascal_integer_type_node, + build_implicit_pascal_binary_op (LT_EXPR, hi, lo), +@@ -1819,7 +1828,7 @@ + enum tree_code code = TREE_CODE (expr); + if (code == VAR_DECL && !PASCAL_INITIALIZED (expr) && !PASCAL_VALUE_ASSIGNED (expr) + && !PASCAL_TREE_DISCRIMINANT (expr) && DECL_CONTEXT (expr) == current_function_decl) +- warning ("`%s' might be used uninitialized in type definition", IDENTIFIER_NAME (DECL_NAME (expr))); ++ gpc_warning ("`%s' might be used uninitialized in type definition", IDENTIFIER_NAME (DECL_NAME (expr))); + else if (IS_EXPR_OR_REF_CODE_CLASS (TREE_CODE_CLASS (code))) + { + int i, l = NUMBER_OF_OPERANDS (code); +@@ -2658,6 +2667,7 @@ + } + else if (TREE_CODE (arg1) == INTEGER_CST && TREE_CODE (arg0) == CONSTRUCTOR) + { ++#ifndef GCC_4_1 + tree elts = CONSTRUCTOR_ELTS (arg0); + arg1 = range_check (TYPE_DOMAIN (TREE_TYPE (arg0)), arg1); + CHK_EM (arg1); +@@ -2667,6 +2677,17 @@ + return TREE_VALUE (elts); + elts = TREE_CHAIN (elts); + } ++#else ++ VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (arg0); ++ tree index, value; ++ unsigned HOST_WIDE_INT ix; ++ arg1 = range_check (TYPE_DOMAIN (TREE_TYPE (arg0)), arg1); ++ FOR_EACH_CONSTRUCTOR_ELT (elts, ix, index, value) ++ { ++ if (tree_int_cst_equal (arg1, index)) ++ return value; ++ } ++#endif + } + return t; + } +@@ -2953,7 +2974,7 @@ + int need_new_variant; + + if (bindable && !PASCAL_TYPE_FILE (type)) +- warning ("GPC supports `bindable' only for files"); ++ gpc_warning ("GPC supports `bindable' only for files"); + + CHK_EM (type); + +diff -urN gpc-20060325/p/units/crt.inc gpc-20070904/p/units/crt.inc +--- gpc-20060325/p/units/crt.inc 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/crt.inc 2007-09-04 08:22:55.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/crt.pas gpc-20070904/p/units/crt.pas +--- gpc-20060325/p/units/crt.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/crt.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -167,7 +167,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/crtc.c gpc-20070904/p/units/crtc.c +--- gpc-20060325/p/units/crtc.c 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/crtc.c 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/crtdjgpp.h gpc-20070904/p/units/crtdjgpp.h +--- gpc-20060325/p/units/crtdjgpp.h 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/crtdjgpp.h 2007-09-04 08:22:55.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/crtlinux386.h gpc-20070904/p/units/crtlinux386.h +--- gpc-20060325/p/units/crtlinux386.h 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/crtlinux386.h 2007-09-04 08:22:55.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/crtx.c gpc-20070904/p/units/crtx.c +--- gpc-20060325/p/units/crtx.c 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/crtx.c 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/dos.pas gpc-20070904/p/units/dos.pas +--- gpc-20060325/p/units/dos.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/dos.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -29,7 +29,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/dosunix.pas gpc-20070904/p/units/dosunix.pas +--- gpc-20060325/p/units/dosunix.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/dosunix.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -14,7 +14,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/fileutils.pas gpc-20070904/p/units/fileutils.pas +--- gpc-20060325/p/units/fileutils.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/fileutils.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/gmp.pas gpc-20070904/p/units/gmp.pas +--- gpc-20060325/p/units/gmp.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/gmp.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -16,7 +16,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/gpc-bp.pas gpc-20070904/p/units/gpc-bp.pas +--- gpc-20060325/p/units/gpc-bp.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/gpc-bp.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -66,7 +66,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/gpcutil.pas gpc-20070904/p/units/gpcutil.pas +--- gpc-20060325/p/units/gpcutil.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/gpcutil.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -13,7 +13,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/heapmon.pas gpc-20070904/p/units/heapmon.pas +--- gpc-20060325/p/units/heapmon.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/heapmon.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -22,7 +22,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/intl.pas gpc-20070904/p/units/intl.pas +--- gpc-20060325/p/units/intl.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/intl.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -38,7 +38,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/units/intlc.c gpc-20070904/p/units/intlc.c +--- gpc-20060325/p/units/intlc.c 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/intlc.c 2007-09-04 08:22:55.000000000 +0200 +@@ -6,7 +6,7 @@ + + This unit is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + This unit is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/units/md5.pas gpc-20070904/p/units/md5.pas +--- gpc-20060325/p/units/md5.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/md5.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -12,7 +12,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU Library General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + GNU Pascal is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/units/overlay.pas gpc-20070904/p/units/overlay.pas +--- gpc-20060325/p/units/overlay.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/overlay.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/pipes.pas gpc-20070904/p/units/pipes.pas +--- gpc-20060325/p/units/pipes.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/pipes.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/pipesc.c gpc-20070904/p/units/pipesc.c +--- gpc-20060325/p/units/pipesc.c 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/pipesc.c 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +@@ -187,7 +187,7 @@ + Libiberty is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either +-version 2 of the License, or (at your option) any later version. ++version 3 of the License, or (at your option) any later version. + + Libiberty is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/units/ports.pas gpc-20070904/p/units/ports.pas +--- gpc-20060325/p/units/ports.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/ports.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -11,7 +11,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/printer.pas gpc-20070904/p/units/printer.pas +--- gpc-20060325/p/units/printer.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/printer.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/regex.pas gpc-20070904/p/units/regex.pas +--- gpc-20060325/p/units/regex.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/regex.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -98,7 +98,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/regexc.c gpc-20070904/p/units/regexc.c +--- gpc-20060325/p/units/regexc.c 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/regexc.c 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/strings.pas gpc-20070904/p/units/strings.pas +--- gpc-20060325/p/units/strings.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/strings.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/stringutils.pas gpc-20070904/p/units/stringutils.pas +--- gpc-20060325/p/units/stringutils.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/stringutils.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -9,7 +9,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/system.pas gpc-20070904/p/units/system.pas +--- gpc-20060325/p/units/system.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/system.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -58,7 +58,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/tfdd.pas gpc-20070904/p/units/tfdd.pas +--- gpc-20060325/p/units/tfdd.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/tfdd.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/trap.pas gpc-20070904/p/units/trap.pas +--- gpc-20060325/p/units/trap.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/trap.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -48,7 +48,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/trapc.c gpc-20070904/p/units/trapc.c +--- gpc-20060325/p/units/trapc.c 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/trapc.c 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/turbo3.pas gpc-20070904/p/units/turbo3.pas +--- gpc-20060325/p/units/turbo3.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/turbo3.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/wincrt.pas gpc-20070904/p/units/wincrt.pas +--- gpc-20060325/p/units/wincrt.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/wincrt.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/units/windos.pas gpc-20070904/p/units/windos.pas +--- gpc-20060325/p/units/windos.pas 2006-02-18 14:23:05.000000000 +0100 ++++ gpc-20070904/p/units/windos.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -28,7 +28,7 @@ + + GNU Pascal is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published +- by the Free Software Foundation; either version 2, or (at your ++ by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNU Pascal is distributed in the hope that it will be useful, but +diff -urN gpc-20060325/p/utils/Makefile gpc-20070904/p/utils/Makefile +--- gpc-20060325/p/utils/Makefile 2006-03-24 02:47:16.000000000 +0100 ++++ gpc-20070904/p/utils/Makefile 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + # + # GNU Pascal is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2, or (at your option) ++# the Free Software Foundation; either version 3, or (at your option) + # any later version. + # + # GNU Pascal is distributed in the hope that it will be useful, +diff -urN gpc-20060325/p/utils/binobj.pas gpc-20070904/p/utils/binobj.pas +--- gpc-20060325/p/utils/binobj.pas 2006-02-18 14:23:06.000000000 +0100 ++++ gpc-20070904/p/utils/binobj.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -14,7 +14,7 @@ + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of +diff -urN gpc-20060325/p/utils/gpidump.pas gpc-20070904/p/utils/gpidump.pas +--- gpc-20060325/p/utils/gpidump.pas 2006-03-24 03:47:16.000000000 +0100 ++++ gpc-20070904/p/utils/gpidump.pas 2007-09-04 08:22:55.000000000 +0200 +@@ -6,7 +6,7 @@ + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +- published by the Free Software Foundation, version 2. ++ published by the Free Software Foundation, version 3. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -902,6 +902,9 @@ + {$ifdef EGCS97} + Ref ('size_unit'); + {$endif} ++{$ifdef GCC_4_1} ++ if TreeCode <> FUNCTION_DECL then ++{$endif} + Write (', align ', Number (GetNumber (Pos1), 0)) + end; + 'c': Ref ('type'); +@@ -1166,6 +1169,18 @@ + OPERATOR_DECL: ; + PLACEHOLDER_EXPR: Ref ('type'); + NON_LVALUE_EXPR: if IsPackedAccess then Ref ('packed_info'); ++{$ifdef GCC_4_1} ++ CONSTRUCTOR: begin ++ var j, k : GPIInt; ++ Ref ('type'); ++ k := GetNumber (Pos1); ++ for j := 1 to k do begin ++ Ref('index'); ++ Ref('value') ++ end; ++ end; ++ ++{$endif} + else if not ClassDone + {$ifndef GCC_4_0} or (TreeCode = RTL_EXPR) {$endif} + then Error ('unknown tree code') +@@ -1232,7 +1247,8 @@ + GPI_CHUNK_VERSION: begin + WriteLn; + DumpChars (' ', 0, ChunkLength - 1); +- if (ChunkLength = 0) or not IsSuffix (GCC_VERSION, Buf^.Chars[0 .. ChunkLength - 1]) then ++ ++ if (ChunkLength = 0) {$ifndef GCC_4_0} or not IsSuffix (GCC_VERSION, Buf^.Chars[0 .. ChunkLength - 1]) {$endif} then + begin + WriteLn; + Error ('backend version in GPI file does not match (rebuild GPIDump for your compiler version)') +diff -urN gpc-20060325/p/utils/mk-t-inc gpc-20070904/p/utils/mk-t-inc +--- gpc-20060325/p/utils/mk-t-inc 2006-03-25 01:28:56.000000000 +0100 ++++ gpc-20070904/p/utils/mk-t-inc 2007-09-04 08:22:55.000000000 +0200 +@@ -8,7 +8,7 @@ + # + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License as +-# published by the Free Software Foundation, version 2. ++# published by the Free Software Foundation, version 3. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of +@@ -71,6 +71,6 @@ + { + cat "$GCCDIR/tree.def" + echo 'DEFTREECODE (LAST_AND_UNUSED_C_TREE_CODE, "unused", '"'x', 0)" +- sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d}' "$GCCDIR/p/p-tree.def" ++ sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d;}' "$GCCDIR/p/p-tree.def" + } | sed -ne ':loop;/\\$/{N;b loop};/^DEFTREECODE/{s,/\*.*\*/,,;s/["'"'"']x["'"'"'].*/'"'x', 0)/;p;};/^#/p" + } > "$2" || { rm -f "$2"; false; } --- gpc-4.1-2.1-4.1.2.orig/debian/rules.source +++ gpc-4.1-2.1-4.1.2/debian/rules.source @@ -0,0 +1,21 @@ +SOURCE_DIR := $(dir $(lastword $(MAKEFILE_LIST))) +patchdir = $(SOURCE_DIR)/patches + +include $(SOURCE_DIR)/debian/rules.defs +include $(SOURCE_DIR)/debian/rules.patch +include $(SOURCE_DIR)/debian/rules.unpack + +patch-source: $(patch_stamp) + ( \ + echo '#define __$(subst -,_,$(DEB_TARGET_GNU_TYPE))__'; \ + echo ''; \ + echo ' { "", "$(DEB_TARGET_GNU_TYPE)"},'; \ + cat $(SOURCE_DIR)/debian/multiarch.inc; \ + ) > $(srcdir)/gcc/multiarch.inc + +clean-source: + rm -rf $(stampdir) + rm -rf $(gcc_srcdir) $(gpc_srcdir) p $(gdc_srcdir) d + rm -rf bin + rm -rf $(srcdir) + --- gpc-4.1-2.1-4.1.2.orig/debian/README.libstdc++-baseline.in +++ gpc-4.1-2.1-4.1.2/debian/README.libstdc++-baseline.in @@ -0,0 +1,2 @@ +The libstdc++ baseline file is a list of symbols exported by the +libstdc++ library. --- gpc-4.1-2.1-4.1.2.orig/debian/FAQ.gcj +++ gpc-4.1-2.1-4.1.2/debian/FAQ.gcj @@ -0,0 +1,494 @@ +The GCJ FAQ +=========== + + The latest version of this document is always available at + http://gcc.gnu.org/java/faq.html. + + General Questions + + What license is used for libgcj? + How can I report a bug in libgcj? + How can I contribute to libgcj + Is libgcj part of GCC? + Will gcj and libgcj work on my machine? + How can I debug my Java program? + Can I interface byte-compiled and native java code? + + + Java Feature Support + + What Java API's are supported? How complete is + the support? + Does GCJ support using straight C native methods + ala JNI? + Why does GCJ use CNI? + What is the state of AWT support? + How about support for Swing ? + What support is there for RMI ? + Can I use any code from other OpenSource projects + to supplement libgcj's current features ? + What features of the Java language are/arn't supported + + + Build Issues + + I need something more recent than the last release; how + should I build it? + Linker bug on Solaris + Can I configure/build in the source tree? + My libgcj build fails with "invalid use of undefined type + struct sigcontext_struct" + + + Gcj Compile/Link Questions + + Why do I get undefined reference to `main' errors? + Can GCJ only handle source code? + "gcj -C" Doesn't seem to work like javac/jikes. Whats going on? + Where does GCJ look for files? + How does gcj resolve wether to compile .class or .java files? + I'm getting link errors! + I'm getting 'undefined symbol: __dso_handle' + + + Runtime Questions + + My program is dumping core! What's going on? + When I run the debugger I get a SEGV in the GC! What's going on? + I have just compiled and benchmarked my Java application + and it seems to be running slower than than XXX JIT JVM. Is there + anything I can do to make it go faster? + Can I profile Garbage Collection? + How do I increase the runtime's initial and maximum heap sizes? + How can I profile my application? + My program seems to hang and doesn't produce any output + + + Programming Issues + + Are there any examples of how to use CNI? + Is it possible to invoke GCJ compiled Java code from a + C++ application? + +General Questions +================= + + 1.1 What license is used for libgcj? + + libgcj is distributed under the GPL, with the 'libgcc exception'. + This means that linking with libgcj does not by itself cause + your program to fall under the GPL. See LIBGCJ_LICENSE in + the source tree for more details. + + 1.2 How can I report a bug in libgcj? + + libgcj has a corresponding Gnats bug database which you can + browse. You can also submit new bug reports from the Gnats + page. + + 1.3 How can I contribute to libgcj? + + You can send simple bug fixes in as patches. Please follow + the GCC guidelines for submitting patches. For more complex + changes, you must sign copyright over to the Free Software + Foundation. See the contribution page for details. + + 1.4 Is libgcj part of GCC? + + Yes, libgcj is now part of GCC. It can be downloaded, + configured and built as one single tree. + + 1.5 Will gcj and libgcj work on my machine? + + Gcj and libgcj are known to work more or less with IA-32 and + Sparc Solaris, Tru64 Unix, as well as IA-32, IA-64, Alpha, + and PowerPC Linux. They might work on other + systems. Generally speaking, porting to a new system should + not be hard. This would be a good way to volunteer. + + 1.6 How can I debug my Java program? + + gdb 5.0 includes support for debugging gcj-compiled Java + programs. For more information please read Java Debugging + with gdb. + + 1.7 Can I interface byte-compiled and native java code + + libgcj has a bytecode interpreter that allows you to mix + .class files with compiled code. It works pretty + transparently: if a compiled version of a class is not found + in the application binary or linked shared libraries, the + class loader will search for a bytecode version in your + classpath, much like a VM would. Be sure to build libgcj + with the --enable-interpreter option to enable this + functionality. + + The program "gij" provides a front end to the interpreter + that behaves much like a traditional virtual machine. You + can even use "gij" to run a shared library which is compiled + from java code and contains a main method: + + $ gcj -shared -o lib-HelloWorld.so HelloWorld.java + $ gij HelloWorld + + This works because gij uses Class.forName, which knows how + to load shared objects. + +Java Feature Support +==================== + + 2.1 What Java API's are supported? How complete is + the support? + + Matt Welsh writes: + + Just look in the 'libjava' directory of libgcj and see + what classes are there. Most GUI stuff isn't there yet, + that's true, but many of the other classes are easy to add + if they don't yet exist. + + I think it's important to stress that there is a big + difference between Java and the many libraries which Java + supports. Unfortunately, Sun's promise of "write once, run + everywhere" assumes much more than a JVM: you also need + the full set of JDK libraries. Considering that new Java + APIs come out every week, it's going to be impossible to + track everything. + + To make things worse, you can't simply run Sun's JDK + classes on any old JVM -- they assume that a bunch of + native methods are also defined. Since this native method + requirement isn't defined by the JDK specs, you're + effectively constrained to using Sun's JVMs if you want to + use Sun's JDK libraries. Oh yes -- you could also + reimplement all of those native methods yourself, and make + sure they behave exactly as Sun's do. Note that they're + undocumented! + + 2.2 Does GCJ support using straight C native methods + ala JNI? + + Yes. libgcj now has experimental support for JNI, in + addition to its native Compiled Native Interface (CNI). gcjh + will generate JNI stubs and headers using the "-jni" + option. However, we do prefer CNI: it is more efficient, + easier to write, and (at least potentially) easier to debug. + + 2.3 Why does GCJ use CNI? + + Per Bothner explains: + + We use CNI because we think it is a better solution, + especially for a Java implementation that is based on the + idea that Java is just another programming language that + can be implemented using standard compilation + techniques. Given that, and the idea that languages + implemented using Gcc should be compatible where it makes + sense, it follows that the Java calling convention should + be as similar as practical to that used for other + languages, especially C++, since we can think of Java as a + subset of C++. CNI is just a set of helper functions and + conventions built on the idea that C++ and Java have the + *same* calling convention and object layout; they are + binary compatible. (This is a simplification, but close + enough.) + + 2.4 What is the state of AWT support? + + Work is in progress to implement AWT and Java2D. We intend + to support both GTK and xlib peers written using CNI. Some + components are already working atop the xlib peers. + + 2.5 How about support for Swing? + + Once AWT support is working then Swing support can be + considered. There is at least one free-software partial + implementations of Swing that may be usable. + + 2.6 What support is there for RMI? + + RMI code exists on the CVS trunk (aka gcc 3.1), but it has + not been heavily tested. This code was donated by + Transvirtual Technologies. + + 2.7 Can I use any code from other OpenSource + projects to supplement libgcj's current features? + + Certainly. However, in many cases, if you wanted to + contribute the code back into the official libgcj + distribution, we would require that the original author(s) + assign copyright to the Free Software Foundation. As of + March 6, 2000, libgcj has been relicenced, and copyright + has been assigned to the FSF. This allows us to share and + merge much of the libgcj codebase with the Classpath + project. Our eventual goal is for Classpath to be an + upstream source provider for libgcj, however it will be + some time before this becomes reality: libgcj and Classpath + have different implementations of many core java + classes. In order to merge them, we need to select the best + (most efficient, cleanest) implementation of each + method/class/package, resolve any conflicts created by the + merge, and test the final result. Needless to say, this is + a lot of work. If you can help out, please let us know! + + 2.8 What features of the Java language are/aren't supported. + + GCJ supports all Java language constructs as per the Java + language Specification. Recent GCJ snapshots have added + support for most JDK1.1 (and beyond) language features, + including inner classes. + +Build Issues +============ + + 3.1 I need something more recent than the last release. + How should I build it? + + Please read here: http://gcc.gnu.org/java/build-snapshot.html + + 3.2 Linker bug on Solaris + + There is a known problem with the native Solaris linker when + using gcc/gcj. A good indication you've run into this + problem is if you get an error that looks like the following + when building libgcj: + +ld: warning: option -o appears more than once, first setting taken +ld: fatal: file libfoo.so: cannot open file: No such file or directory +ld: fatal: File processing errors. No output written to .libs/libfoo.so +collect2: ld returned 1 exit status + + A known workaround for this and other reported link problems + on the various releases of Solaris is to build gcc/gcj with + the latest GNU binutils instead of the native Solaris + ld. The most straightforward way to do this is to build and + install binutils, and then reference it in the configure for + gcc via --with-ld=/path_to_binutils_install/bin/ld + (--with-as may also be similarly specified but is not + believed to be required). + + Please note, gcc/gcj must be built using GNU ld prior to + doing a clean build of libgcj! + + 3.3 Can I configure/build in the source tree? + + No. You cannot configure/build in the source tree. If you + try, you'll see something like: + + $ ./configure [...] + Configuring for a i686-pc-linux-gnu host. + *** Cannot currently configure in source tree. + + Instead, you must build in another directory. E.g.: + + $ mkdir build + $ cd build + $ ../configure [...] + + 3.4 My libgcj build fails with "invalid use of undefined type + struct sigcontext_struct" + + If you're using Linux, this probably means you need to + upgrade to a newwer, glibc (libc6) based Linux + distribution. libgcj does not support the older linux libc5. + It might be possible to get a working libgcj by changing + occurances of "sigcontext_struct" to "sigcontext", however + this has not been tested. Even if it works, it is likely + that there are other issues with older libc versions that + would prevent libgcj from working correctly (threads bugs, + for example). + +Gcj Compile/Link Questions +========================== + + 4.1 Why do I get undefined reference to `main' errors? + + When using gcj to link a Java program, you must use the --main= + option to indicate the class that has the desired main method. + This is because every Java class can have a main method, thus + you have to tell gcj which one to use. + + 4.2 Can GCJ only handle source code? + + GCJ will compile both source (.java) and bytecode (.class) + files. However, in many cases the native code produced by + compiling from source is better optimized than that compiled + from .class files. + + Per Bothner explains: + + The reason is that when you compile to bytecode you lose a + lot of information about program structure etc. That + information helps in generating better code. We can in + theory recover the information we need by analysing the + structure of the bytecodes, but it is sometimes difficult + - or sometimes it just that no-one has gotten around to + it. Specific examples include loop structure (gcc + generates better code with explicit loops rather than with + the equivalent spaghetti code), array initializers, and + the JDK 1.1 `CLASS.class' syntax, all of which are + represented using more low-level constructs in bytecode. + + 4.3 "gcj -C" Doesn't seem to work like javac/jikes. Whats going on? + + The behavior of "gcj -C" is not at all like javac or jikes, + which will compile (not just scan) all .java's which are out + of date with regard to their .class's. + + 4.4 Where does GCJ look for files? + + GCJ looks for classes to compile based on the CLASSPATH + environment variable. libgcj.jar and other files are found + relative to the path of the compiler itself, so it is safe + to move the entire compiler tree to a different path, and + there is no need to include libgcj.jar in your CLASSPATH. + + 4.5 How does gcj resolve whether to compile .class or .java files? + + GCJ compiles only the files presented to it on the command + line. However, it also needs to scan other files in order to + determine the layout of other classes and check for errors + in your code. For these dependencies, GCJ will favour + .class files if they are available because it is faster to + parse a class file than source code. + + 4.6 I'm getting link errors + + If you get errors at link time that refer to 'undefined + reference to `java::lang::Object type_info function', verify + that you have compiled any CNI C++ files with the -fno-rtti + option. This is only required for versions of GCJ earlier + than 3.0. + + 4.7 I'm getting 'undefined symbol: __dso_handle' + + Some versions of the GNU linker have broken support for the + '.hidden' directive, which results in problems with shared + libraries built with recent versions of gcc. + + There are three solutions: + + - downgrade to binutils that don't support .hidden at all, + - upgrade to a recent binutils, or + - undef the HAVE_GAS_HIDDEN definition in gcc's auto-host.h + (and rebuild gcc). + +Runtime Questions +================= + + 5.1 My program is dumping core! What's going on? + + It could be any number of things. One common mistake is + having your CLASSPATH environment variable pointing at a + third party's java.lang and friends. Either unset CLASSPATH, + or make sure it does not refer to core libraries other than + those found in libgcj.jar.Note that newwer versions of GCJ + will reject the core class library if it wasn't generated by + GCJ itself. + + 5.2 When I run the debugger I get a SEGV in the GC! What's going on? + + This is "normal"; the Garbage Collector (GC) uses it to + determine stack boundaries. It is ordinarily caught and + handled by the GC -- you can see this in the debugger by + using cont to continue to the "real" segv. + + 5.3 I have just compiled and benchmarked my Java application + and it seems to be running slower than than XXX JIT JVM. Is there + anything I can do to make it go faster? + + A few things: + + - If your programs allocate many small, short lived objects, + the heap could be filling and triggering GC too + regularly. Try increasing the initial and maximum heap sizes + as per 5.5 How do I increase the runtime's initial and + maximum heap size? + - RE - array accesses. We have sub-optimal runtime checking + code, and the compiler is still not so smart about + automatically removing array checks. If your code is ready, + and it doesn't rely on them, try compiling with + --no-bounds-check. + - Try static linking. On many platforms, dynamic (PIC) + function calls are more expensive than static ones. In + particular, the interaction with boehm-gc seems to incur + extra overhead when shared libraries are used. + - If your Java application doesn't need threads, try + building libgcj using --enable-threads=none. Portions of the + libgcj runtime are still more efficient when + single-threaded. + + 5.4 Can I profile Garbage Collection? + + It is possible to turn on verbose GC output by supressing + the -DSILENT flag during build. One way to do this is to + comment out the line with #define SILENT 1 from + boehm-gc/configure before configuring libgcj. The GC will + print collection statistics to stdout. (Rebuilding boehm-gc + alone without this flag doesn't seem to work.) + + 5.5 How do I increase the runtime's initial and maximum heap sizes? + + Some programs that allocate many small, short-lived objects + can cause the default-sized heap to fill quickly and GC + often. With the 2.95.1 release there is no means to adjust + the heap at runtime. Recent snapshots provide the -ms and + -mx arguments to gij to specify the initial and maximum heap + sizes, respectively. + + 5.6 How can I profile my application? + + Currently, only single threaded Java code may be used by the + profiler (gprof). POSIX threads seem to be incompatible with + the gmon stuff. A couple of other tools that have been + mentioned on the GCJ mailing list are sprof and cprof. The + former is part of GNU libc. + + 5.7 My program seems to hang and doesn't produce any output + + Some versions had a bug in the iconv support. You can work + around it by setting LANG=en_US.UTF-8 at runtime, or give + the following option during compile time + -Dfile.encoding=UTF-8. This problem should no longer occur + as of November 1, 2000. + +Programming Issues +================== + + 6.1 Are there any examples of how to use CNI? + + Glenn Chambers has created a couple of trivial examples for + version 2.95 and version 3.0. As a comparison, here is the + same example as a JNI application using Kaffe. The same + code will work with GCJ, as shown here. + + Note that for version 2.95, you must compile the C++ files + used for CNI with the -fno-rtti option. This constraint + does not apply in version 3.0 and later. + + The primary source of documentation for CNI is at + http://gcc.gnu.org/java/papers/cni/t1.html + + 6.2 Is it possible to invoke GCJ compiled Java code from a + C++ application? + + Yes, GCJ 3.1 supports a CNI-based invocation interface as + well as the traditional JNI invocation API. See the GCJ + Manual for more details on how to use the CNI interface. + +Please send FSF & GNU inquiries & questions tognu@gnu.org.There are +also other waysto contact the FSF. + +These pages are maintained by The GCC team. + +Please send comments on these web pages and GCC to our publicmailing +list at gcc@gnu.org orgcc@gcc.gnu.org, send other questions to +gnu@gnu.org. + +Copyright (C) Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111, USA. + +Verbatim copying and distribution of this entire article is permitted +in any medium, provided this notice is preserved. + +Last modified 2003-04-30 --- gpc-4.1-2.1-4.1.2.orig/debian/control.m4 +++ gpc-4.1-2.1-4.1.2/debian/control.m4 @@ -0,0 +1,1278 @@ +divert(-1) + +define(`checkdef',`ifdef($1, , `errprint(`error: undefined macro $1 +')m4exit(1)')') +define(`errexit',`errprint(`error: undefined macro `$1' +')m4exit(1)') + +dnl The following macros must be defined, when called: +dnl ifdef(`SRCNAME', , errexit(`SRCNAME')) +dnl ifdef(`PV', , errexit(`PV')) +dnl ifdef(`ARCH', , errexit(`ARCH')) + +dnl The architecture will also be defined (-D__i386__, -D__powerpc__, etc.) + +define(`PN', `$1') +ifdef(`PRI', `', ` + define(`PRI', `$1') +') +define(`MAINTAINER', `Debian GCC Maintainers ') + +define(`ifenabled', `ifelse(index(enabled_languages, `$1'), -1, `dnl', `$2')') + +divert`'dnl +dnl -------------------------------------------------------------------------- +Source: SRCNAME +Section: devel +Priority: PRI(optional) +ifelse(DIST,`Ubuntu',`dnl +ifelse(regexp(SRCNAME, `gcc-snapshot\|gnat'),0,`dnl +Maintainer: Ubuntu MOTU Developers +', `dnl +Maintainer: Ubuntu Core developers +')dnl SRCNAME +XSBC-Original-Maintainer: MAINTAINER +', `dnl +Maintainer: MAINTAINER +')dnl DIST +ifelse(regexp(SRCNAME, `gnat'),0,`dnl +Uploaders: Ludovic Brenta +', regexp(SRCNAME, `gdc'),0,`dnl +Uploaders: Arthur Loiret , Matthias Klose +', regexp(SRCNAME, `gpc'),0,`dnl +Uploaders: Matthias Klose +', `dnl +Uploaders: Matthias Klose +')dnl SRCNAME +Standards-Version: 3.8.4 +ifdef(`TARGET',`dnl cross +Build-Depends: dpkg-dev (>= 1.13.9), dpkg-cross (>= 1.25.99), LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTOGEN_BUILD_DEP m4, autoconf2.59, autoconf2.13, automake1.9, libtool, gawk, bzip2, BINUTILS_BUILD_DEP, debhelper (>= 5.0), bison (>= 1:2.3), flex, realpath (>= 1.9.12), lsb-release, make (>= 3.81) +',`dnl native +Build-Depends: dpkg-dev (>= 1.13.9), gcc-4.1, gcc-4.1-multilib [amd64 i386 powerpc ppc64 s390 sparc kfreebsd-amd64], LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP AUTOGEN_BUILD_DEP libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf2.59, autoconf2.13, automake1.9, libtool, gawk, CHECK_BUILD_DEP, bzip2, BINUTILS_BUILD_DEP, binutils-hppa64 (>= BINUTILSV) [hppa], debhelper (>= 5.0), gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libmpfr-dev (>= 2.3.0~rc1.dfsg.1) [fortran_no_archs], locales [locale_no_archs], procps [linux_gnu_archs], sharutils, PASCAL_BUILD_DEP GDC_BUILD_DEP JAVA_BUILD_DEP GNAT_BUILD_DEP realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81) +Build-Depends-Indep: LIBSTDCXX_BUILD_INDEP JAVA_BUILD_INDEP +')dnl +ifelse(regexp(SRCNAME, `gnat'),0,`dnl +Homepage: http://gcc.gnu.org/ +', regexp(SRCNAME, `gdc'),0,`dnl +Homepage: http://dgcc.sourceforge.net/ +', regexp(SRCNAME, `gpc'),0,`dnl +Homepage: http://www.gnu-pascal.de/gpc/h-index.html +', `dnl +Homepage: http://gcc.gnu.org/ +')dnl SRCNAME + +ifelse(SRCNAME,gcc-snapshot,`dnl +Package: gcc-snapshot +Architecture: any +Section: devel +Priority: extra +Depends: binutils`'TS (>= ${binutils:Version}), ${dep:libcdev}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends} +Provides: c++abi2-dev +Description: A SNAPSHOT of the GNU Compiler Collection + This package contains a recent development SNAPSHOT of all files + contained in the GNU Compiler Collection (GCC). + . + DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES! + . + This package will NEVER hit the testing distribution. It is used for + tracking gcc bugs submitted to the Debian BTS in recent development + versions of gcc. +',`dnl gcc-X.Y + +dnl default base package dependencies +define(`BASETARGET', `') +define(`BASEDEP', `gcc`'PV-base (= ${gcc:Version})') +define(`SOFTBASEDEP', `gcc`'PV-base (>= ${gcc:SoftVersion})') + +ifdef(`TARGET', `', ` +ifenabled(`gccbase',` + +Package: gcc`'PV-base +Architecture: any +Section: libs +Priority: PRI(optional) +Depends: ${misc:Depends} +Description: The GNU Compiler Collection (base package) + This package contains files common to all languages and libraries + contained in the GNU Compiler Collection (GCC). +ifdef(`BASE_ONLY', `dnl + . + This version of GCC is not yet available for this architecture. + Please use the compilers from the gcc-snapshot package for testing. +')`'dnl +')`'dnl +')`'dnl native + +ifenabled(`gccxbase',` +dnl override default base package dependencies to cross version +dnl This creates a toolchain that doesnt depend on the system -base packages +dnl set via DEB_CROSS_INDEPENDENT=yes +define(`BASETARGET', `PV`'TS') +define(`BASEDEP', `gcc`'BASETARGET-base (= ${gcc:Version})') +define(`SOFTBASEDEP', `gcc`'BASETARGET-base (>= ${gcc:SoftVersion})') + +Package: gcc`'BASETARGET-base +Architecture: any +Section: devel +Priority: PRI(optional) +Depends: ${misc:Depends} +Conflicts: gcc-3.5-base +Replaces: gcc-3.5-base +Description: The GNU Compiler Collection (base package) + This package contains files common to all languages and libraries + contained in the GNU Compiler Collection (GCC). +')`'dnl + +ifenabled(`java',` +Package: gcj`'PV-base +Architecture: any +Section: libs +Priority: PRI(optional) +Depends: ${misc:Depends} +Description: The GNU Compiler Collection (gcj base package) + This package contains files common to all java related packages + built from the GNU Compiler Collection (GCC). +')`'dnl java + +ifenabled(`ada',` +Package: gnat`'PV-base +Architecture: any +Section: libs +Priority: PRI(optional) +Depends: ${misc:Depends} +Description: The GNU Compiler Collection (gnat base package) + This package contains files common to all Ada related packages + built from the GNU Compiler Collection (GCC). +')`'dnl ada + +ifenabled(`libgcc',` +Package: libgcc1`'LS +Architecture: ifdef(`TARGET',`all',`any') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',required) +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libgcc1-TARGET-dcv1 +',`')`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libgcc2`'LS +Architecture: ifdef(`TARGET',`all',`m68k') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',required) +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libgcc2-TARGET-dcv1 +',`')`'dnl +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libgcc + +ifenabled(`lib4gcc',` +Package: libgcc4`'LS +Architecture: ifdef(`TARGET',`all',`hppa') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',required) +Depends: ifdef(`STANDALONEJAVA',`gcj`'PV-base (>= ${gcj:Version})',`BASEDEP'), ${shlibs:Depends}, ${misc:Depends} +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib4gcc + +ifenabled(`lib64gcc',` +Package: lib64gcc1`'LS +Architecture: ifdef(`TARGET',`all',`biarch64_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib64gcc1-TARGET-dcv1 +',`')`'dnl +Conflicts: libgcc`'GCC_SO`'LS (<= 1:3.3-0pre9) +Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (64bit) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib64gcc + +ifdef(`TARGET', `', `dnl +ifenabled(`lib32gcc',` +Package: lib32gcc1`'LS +Architecture: biarch32_archs +Section: libs +Priority: optional +Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib32gcc1-TARGET-dcv1 +',`')`'dnl +ifelse(DIST,`Ubuntu', `Replaces: ia32-libs-openoffice.org (<< 1ubuntu3)', `dnl') +Description: GCC support library (32 bit Version) + Shared version of the support library, a library of internal subroutines + that GCC uses to overcome shortcomings of particular machines, or + special needs for some languages. +')`'dnl +')`'dnl + +ifenabled(`cdev',` +Package: gcc`'PV`'TS +Architecture: any +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, cpp`'PV`'TS (= ${gcc:Version}), binutils`'TS (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dep:libcdev} +Suggests: ${gcc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), gcc`'PV-locales (>= ${gcc:SoftVersion}), libmudflap`'MF_SO-dev`'LS (>= ${gcc:Version}) +Provides: c-compiler`'TS, libssp0-dev +ifdef(`TARGET',`dnl',`Conflicts: libssp0-dev (<< 4.1.1-6)') +ifdef(`TARGET',`dnl',`Replaces: gcj-4.1 (<< 4.1.1), libssp0-dev (<< 4.1.1-6)') +Description: The GNU C compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C compiler, a fairly portable optimizing compiler for C. +ifdef(`TARGET', `dnl + . + This package contains C cross-compiler for TARGET architecture. +')`'dnl + +ifenabled(`multilib',` +Package: gcc`'PV-multilib`'TS +Architecture: MULTILIB_ARCHS +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarch}, ${dep:libsspbiarch}, ${dep:libgompbiarch}, ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dep:libmudflapbiarch} +Replaces: gcc-4.1 (<< 4.1.2-4) +Description: The GNU C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C compiler, a fairly portable optimizing compiler for C. + . + On architectures with multilib support, the package contains files + and dependencies for the non-default multilib architecture(s). +')`'dnl multilib +')`'dnl cdev + +ifenabled(`cdev',` +ifdef(`TARGET', `', ` +#Package: gcc`'PV-hppa64 +#Architecture: hppa +#Section: devel +#Priority: PRI(optional) +#Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +#Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.4-hppa64 (<= 3.4.1-3) +#Description: The GNU C compiler (cross compiler for hppa64) +# This is the GNU C compiler, a fairly portable optimizing compiler for C. +')`'dnl native +')`'dnl cdev + +ifenabled(`cdev',` +Package: cpp`'PV`'TS +Architecture: any +Section: ifdef(`TARGET',`devel',`interpreters') +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion}) +ifdef(`TARGET',`dnl',`Conflicts: gcj-4.1 (<< 4.1.1), gnat-4.1 (<= 4.1.1-22)') +ifdef(`TARGET',`dnl',`Replaces: gcj-4.1 (<< 4.1.1)') +Description: The GNU C preprocessor + A macro processor that is used automatically by the GNU C compiler + to transform programs before actual compilation. + . + This package has been separated from gcc for the benefit of those who + require the preprocessor but not the compiler. +ifdef(`TARGET', `dnl + . + This package contains preprocessor configured for TARGET architecture. +')`'dnl + +ifdef(`TARGET', `', ` +ifenabled(`gfdldoc',` +Package: cpp`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends} +Description: Documentation for the GNU C preprocessor (cpp) + Documentation for the GNU C preprocessor in info `format'. +')`'dnl gfdldoc +')`'dnl native + +ifdef(`TARGET', `', ` +Package: gcc`'PV-locales +Architecture: all +Section: devel +Priority: PRI(optional) +Depends: SOFTBASEDEP, cpp`'PV (>= ${gcc:SoftVersion}), ${misc:Depends} +Recommends: gcc`'PV (>= ${gcc:SoftVersion}) +Description: The GNU C compiler (native language support files) + Native language support for GCC. Lets GCC speak your language, + if translations are available. + . + Please do NOT submit bug reports in other languages than "C". + Always reset your language settings to use the "C" locales. +')`'dnl native +')`'dnl cdev + +ifenabled(`c++',` +ifenabled(`c++dev',` +Package: g++`'PV`'TS +Architecture: any +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: c++-compiler`'TS, c++abi2-dev +Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}) +Description: The GNU C++ compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. +ifdef(`TARGET', `dnl + . + This package contains C++ cross-compiler for TARGET architecture. +')`'dnl + +ifenabled(`multilib',` +Package: g++`'PV-multilib`'TS +Architecture: MULTILIB_ARCHS +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libcxxbiarch}, ${shlibs:Depends}, ${misc:Depends} +Suggests: ${dep:libcxxbiarchdbg} +Replaces: libstdc++6-4.1-dev (<< 4.1.2-4) +Description: The GNU C++ compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. + . + On architectures with multilib support, the package contains files + and dependencies for the non-default multilib architecture(s). +')`'dnl multilib +')`'dnl c++dev +')`'dnl c++ + +ifdef(`TARGET', `', ` +ifenabled(`mudflap',` +Package: libmudflap`'MF_SO +Architecture: any +Section: libs +Priority: PRI(optional) +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Description: GCC mudflap shared support libraries + The libmudflap libraries are used by GCC for instrumenting pointer and array + dereferencing operations. + +Package: lib32mudflap`'MF_SO +Architecture: biarch32_archs +Section: libs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libmudflap0 (<< 4.1) +Description: GCC mudflap shared support libraries (32bit) + The libmudflap libraries are used by GCC for instrumenting pointer and array + dereferencing operations. + +Package: lib64mudflap`'MF_SO +Architecture: biarch64_archs +Section: libs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libmudflap0 (<< 4.1) +Description: GCC mudflap shared support libraries (64bit) + The libmudflap libraries are used by GCC for instrumenting pointer and array + dereferencing operations. + +Package: libmudflap`'MF_SO-dev +Architecture: any +Section: libdevel +Priority: PRI(optional) +Depends: BASEDEP, libmudflap`'MF_SO (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: ${sug:libmudflapdev} +Conflicts: libmudflap0-4.2-dev +Description: GCC mudflap support libraries (development files) + The libmudflap libraries are used by GCC for instrumenting pointer and array + dereferencing operations. + . + This package contains the headers and the static libraries. +')`'dnl +')`'dnl native + +ifdef(`TARGET', `', ` +ifenabled(`ssp',` +Package: libssp`'SSP_SO +Architecture: any +Section: libs +Priority: PRI(optional) +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Description: GCC stack smashing protection library + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: lib32ssp`'SSP_SO +Architecture: biarch32_archs +Section: libs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libssp0 (<< 4.1) +Description: GCC stack smashing protection library (32bit) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. + +Package: lib64ssp`'SSP_SO +Architecture: biarch64_archs +Section: libs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libssp0 (<< 4.1) +Description: GCC stack smashing protection library (64bit) + GCC can now emit code for protecting applications from stack-smashing attacks. + The protection is realized by buffer overflow detection and reordering of + stack variables to avoid pointer corruption. +')`'dnl +')`'dnl native + +ifenabled(`proto',` +Package: protoize +Architecture: any +Priority: PRI(optional) +Depends: BASEDEP, gcc`'PV (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Create/remove ANSI prototypes from C code + "protoize" can be used to add prototypes to a program, thus converting + the program to ANSI C in one respect. The companion program "unprotoize" + does the reverse: it removes argument types from any prototypes + that are found. +')`'dnl proto + +ifenabled(`objpp',` +ifenabled(`objppdev',` +Package: gobjc++`'PV`'TS +Architecture: any +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), g++`'PV`'TS (= ${gcc:Version}), ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:EpochVersion}), ${misc:Depends} +Suggests: ${gobjcxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}) +Provides: objc++-compiler`'TS +Description: The GNU Objective-C++ compiler + This is the GNU Objective-C++ compiler, which compiles + Objective-C++ on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. +')`'dnl obcppdev + +ifenabled(`multilib',` +Package: gobjc++`'PV-multilib`'TS +Architecture: MULTILIB_ARCHS +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gobjc++`'PV`'TS (= ${gcc:Version}), g++`'PV-multilib`'TS (= ${gcc:Version}), gobjc`'PV-multilib`'TS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: The GNU Objective-C++ compiler (multilib files) + This is the GNU Objective-C++ compiler, which compiles Objective-C++ on + platforms supported by the gcc compiler. + . + On architectures with multilib support, the package contains files + and dependencies for the non-default multilib architecture(s). +')`'dnl multilib +')`'dnl obcpp + +ifenabled(`objc',` +ifenabled(`objcdev',` +Package: gobjc`'PV`'TS +Architecture: any +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:EpochVersion}), ${misc:Depends} +Suggests: ${gobjc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}) +Provides: objc-compiler`'TS +ifdef(`OBJC_GC',`Recommends: libgc-dev', `dnl') +ifdef(`__sparc__',`Conflicts: gcc`'PV-sparc64', `dnl') +Description: The GNU Objective-C compiler + This is the GNU Objective-C compiler, which compiles + Objective-C on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +ifenabled(`multilib',` +Package: gobjc`'PV-multilib`'TS +Architecture: MULTILIB_ARCHS +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libobjcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gobjc-4.1 (<< 4.1.2-4) +Description: The GNU Objective-C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU Objective-C compiler, which compiles Objective-C on platforms + supported by the gcc compiler. + . + On architectures with multilib support, the package contains files + and dependencies for the non-default multilib architecture(s). +')`'dnl multilib +')`'dnl objcdev + +ifenabled(`libobjc',` +Package: libobjc`'OBJC_SO`'LS +Section: ifdef(`TARGET',`devel',`libs') +Architecture: any +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl libobjc + +ifenabled(`lib64objc',` +Package: lib64objc`'OBJC_SO +Section: libs +Architecture: biarch64_archs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (64bit) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl lib64objc + +ifenabled(`lib32objc',` +Package: lib32objc`'OBJC_SO +Section: libs +Architecture: biarch32_archs +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Objective-C applications (32bit) + Library needed for GNU ObjC applications linked against the shared library. +')`'dnl lib32objc +')`'dnl objc + +ifenabled(`fortran',` +ifenabled(`fdev',` +Package: gfortran`'PV +Architecture: any +Priority: PRI(optional) +Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), libgfortran`'FORTRAN_SO (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Provides: fortran95-compiler +Suggests: ${gfortran:multilib}, gfortran`'PV-doc +Replaces: libgfortran`'FORTRAN_SO-dev +Description: The GNU Fortran 95 compiler + This is the GNU Fortran compiler, which compiles + Fortran 95 on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +ifenabled(`multilib',` +Package: gfortran`'PV-multilib`'TS +Architecture: MULTILIB_ARCHS +Section: devel +Priority: ifdef(`TARGET',`extra',`PRI(optional)') +Depends: BASEDEP, gfortran`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libfortranbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gfortran-4.1 (<< 4.1.2-4) +Description: The GNU Fortran 95 compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `') + This is the GNU Fortran compiler, which compiles Fortran 95 on platforms + supported by the gcc compiler. + . + On architectures with multilib support, the package contains files + and dependencies for the non-default multilib architecture(s). +')`'dnl multilib + +ifenabled(`gfdldoc',` +Package: gfortran`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends} +Description: Documentation for the GNU Fortran compiler (gfortran) + Documentation for the GNU Fortran 95 compiler in info `format'. +')`'dnl gfdldoc +')`'dnl fdev + +ifenabled(`libfortran',` +Package: libgfortran`'FORTRAN_SO +Section: libs +Architecture: any +Priority: PRI(optional) +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl libgfortran + +ifenabled(`lib64gfortran',` +Package: lib64gfortran`'FORTRAN_SO +Section: libs +Architecture: biarch64_archs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (64bit) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl lib64gfortran + +ifenabled(`lib32gfortran',` +Package: lib32gfortran`'FORTRAN_SO +Section: libs +Architecture: biarch32_archs +Priority: PRI(optional) +Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Fortran applications (32bit) + Library needed for GNU Fortran applications linked against the + shared library. +')`'dnl lib32gfortran +')`'dnl fortran + +ifenabled(`java',` +ifenabled(`gcj',` +Package: gcj`'PV +Architecture: any +Priority: PRI(optional) +Depends: gcj`'PV-base (= ${gcj:Version}), ${dep:gcj}, ${dep:libcdev}, gij`'PV (= ${gcj:Version}), libgcj`'GCJ_SO-dev (= ${gcj:Version}), libgcj`'GCJ_SO-jar (>= ${gcj:SoftVersion}), libecj-java (>= 3.3.0-2), java-common, ${shlibs:Depends}, ${misc:Depends} +Recommends: fastjar, libecj-java-gcj +Suggests: java-gcj-compat-dev +Provides: java-compiler +Conflicts: cpp-4.1 (<< 4.1.1), gcc-4.1 (<< 4.1.1), java-gcj-compat-dev (<< 1.0.56-2) +Description: The GNU compiler for Java(TM) + GCJ is a front end to the GCC compiler which can natively compile both + Java(tm) source and bytecode files. The compiler can also generate class + files. +')`'dnl gcj + +ifenabled(`libgcj',` +ifenabled(`libgcjcommon',` +Package: libgcj-common +Section: libs +Architecture: all +Priority: PRI(optional) +Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), ${misc:Depends} +Conflicts: classpath (<= 0.04-4) +Replaces: java-gcj-compat (<< 1.0.65-3), java-gcj-compat-dev (<< 1.0.65-3) +Description: Java runtime library (common files) + This package contains files shared by classpath and libgcj libraries. +')`'dnl libgcjcommon + +Package: gij`'PV +Priority: optional +Architecture: any +Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${dep:prctl}, ${shlibs:Depends}, ${misc:Depends} +Recommends: libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}) +Suggests: fastjar, gcj`'PV (= ${gcj:Version}), java-gcj-compat +Provides: java-virtual-machine, java2-runtime, java1-runtime, java-runtime +Replaces: libgcj7, libgcj7-0 (<< 4.1.2-31) +Conflicts: java-gcj-compat (<< 1.0.69) +Description: The GNU Java bytecode interpreter + GIJ is not limited to interpreting bytecode. It includes a class loader which + can dynamically load shared objects, so it is possible to give it the name + of a class which has been compiled and put into a shared library on the + class path. + +Package: libgcj`'LIBGCJ_EXT +Section: libs +Architecture: any +Priority: PRI(optional) +Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj-common (>= 1:4.1.1-21), ${shlibs:Depends}, ${misc:Depends} +Recommends: libgcj`'GCJ_SO-jar (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}) +Suggests: libgcj`'GCJ_SO-dbg +Conflicts: libgcj7 +Replaces: libgcj7, libgcj7-awt (<< 4.1.1-12) +Description: Java runtime library for use with gcj + This is the runtime that goes along with the gcj front end to + gcc. libgcj includes parts of the Java Class Libraries, plus glue to + connect the libraries to the compiler and the underlying OS. + . + To show file names and line numbers in stack traces, the packages + libgcj`'GCJ_SO-dbg and binutils are required. + +Package: libgcj`'GCJ_SO-jar +Section: libs +Architecture: all +Priority: PRI(optional) +Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT (>= ${gcj:SoftVersion}), ${misc:Depends} +Conflicts: libgcj7-common +Replaces: libgcj7-common +Description: Java runtime library for use with gcj (jar files) + This is the jar file that goes along with the gcj front end to gcc. + +Package: libgcj`'LIBGCJ_EXT-awt +Section: libs +Architecture: any +Priority: PRI(optional) +Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: AWT peer runtime libraries for use with gcj + These are runtime libraries holding the AWT peer implementations + for libgcj (currently only the GTK based peer library). + +Package: gappletviewer`'PV +Section: utils +Architecture: any +Priority: PRI(optional) +Depends: gcj`'PV-base (= ${gcj:Version}), gij`'PV (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Standalone application to execute Java (tm) applets + gappletviewer is a standalone application to execute Java (tm) applets. + +Package: gcjwebplugin`'PV +Section: web +Architecture: any +Priority: PRI(optional) +Depends: gcj`'PV-base (= ${gcj:Version}), gappletviewer`'PV (= ${gcj:Version}), ${shlibs:Depends}, firefox | mozilla-browser | epiphany-browser | galeon | konqueror, ${misc:Depends} +Description: Web browser plugin to execute Java (tm) applets + gcjwebplugin is a little web browser plugin to execute Java (tm) applets. + It is targeted for Mozilla and compatible browsers that support the NPAPI. +')`'dnl libgcj + +ifenabled(`libgcjdev',` +Package: libgcj`'GCJ_SO-dev +Section: libdevel +Architecture: any +Priority: PRI(optional) +Depends: gcj`'PV-base (= ${gcj:Version}), gcj`'PV (= ${gcj:Version}), libgcj`'GCJ_SO-jar (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), libgcj-bc, zlib1g-dev, ${shlibs:Depends}, ${misc:Depends} +Suggests: libgcj-doc +Provides: classpath-doc +Description: Java development headers and static library for use with gcj + These are the development headers and static libraries that go along + with the gcj front end to gcc. libgcj includes parts of the Java Class + Libraries, plus glue to connect the libraries to the compiler and the + underlying OS. + +Package: libgcj`'GCJ_SO-dbg +Section: debug +Architecture: any +Priority: extra +Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${misc:Depends} +Recommends: binutils +Description: Debugging symbols for libraries provided in libgcj`'GCJ_SO-dev + The package provides debugging symbols for the libraries provided + in libgcj`'GCJ_SO-dev. + . + binutils is required to show file names and line numbers in stack traces. + +Package: libgcj`'GCJ_SO-src +Section: libdevel +Architecture: all +Priority: PRI(optional) +Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), gcj`'PV (>= ${gcj:SoftVersion}), libgcj`'GCJ_SO-jar (= ${gcj:Version}), ${misc:Depends} +Description: libgcj java sources for use in eclipse + These are the java source files packaged as a zip file for use in development + environments like eclipse. + +Package: libgcj-doc +Section: doc +Architecture: all +Priority: PRI(optional) +Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), ${misc:Depends} +Enhances: libgcj`'GCJ_SO-dev +Description: libgcj API documentation and example programs + Autogenerated documentation describing the API of the libgcj library. + Sources and precompiled example programs from the classpath library. +')`'dnl libgcjdev +')`'dnl java + +ifenabled(`fastjar',` +Package: fastjar +Section: devel +Architecture: any +Priority: PRI(optional) +Depends: ${shlibs:Depends}, ${misc:Depends} +Provides: jar +Description: Jar creation utility + Replacement for Suns .jar creation program. It is written in C + instead of java and is tons faster. +')`'dnl fastjar + +ifenabled(`libffi',` +Package: libffi`'FFI_SO +Section: libs +Architecture: any +Priority: PRI(optional) +Depends: gcc`'PV`'-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Foreign Function Interface library runtime + A foreign function interface is the popular name for the interface that + allows code written in one language to call code written in another + language. + +Package: lib32ffi`'FFI_SO +Section: libs +Architecture: biarch32_archs +Priority: PRI(optional) +Depends: gcc`'PV`'-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libffi4 (<< 4.1) +Description: Foreign Function Interface library runtime (32bit) + A foreign function interface is the popular name for the interface that + allows code written in one language to call code written in another + language. + +Package: lib64ffi`'FFI_SO +Section: libs +Architecture: biarch64_archs +Priority: PRI(optional) +Depends: gcc`'PV`'-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Replaces: libffi4 (<< 4.1) +Description: Foreign Function Interface library runtime (64bit) + A foreign function interface is the popular name for the interface that + allows code written in one language to call code written in another + language. + +Package: libffi`'FFI_SO-dev +Section: libdevel +Architecture: any +Priority: PRI(optional) +Depends: gcc`'PV`'-base (= ${gcc:Version}), libffi`'FFI_SO (>= ${gcc:Version}), ${misc:Depends} +Suggests: ${sug:libffidev} +Provides: libffi-dev +Conflicts: libffi1-dev, libffi2-dev, libffi3-dev, libffi-dev, libffi +Description: Foreign Function Interface library (development files) + This package contains the headers and static library files necessary for + building programs which use libffi. + . + A foreign function interface is the popular name for the interface that + allows code written in one language to call code written in another + language. +')`'dnl libffi + +ifenabled(`c++',` +ifenabled(`libcxx',` +Package: libstdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`all',`any') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(required)) +Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libstdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +Conflicts: scim (<< 1.4.2-1) +Description: The GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl libcxx + +ifenabled(`lib32cxx',` +Package: lib32stdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`all',`biarch32_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASEDEP, lib32gcc1`'LS, ${misc:Depends} +ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +Description: The GNU Standard C++ Library v3 (32 bit Version) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib32cxx + +ifenabled(`lib64cxx',` +Package: lib64stdc++CXX_SO`'LS +Architecture: ifdef(`TARGET',`all',`biarch64_archs') +Section: ifdef(`TARGET',`devel',`libs') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASEDEP, ${shlibs:Depends}, lib64gcc1`'LS, ${misc:Depends} +ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-TARGET-dcv1 +',`')`'dnl +Description: The GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (64bit) + This package contains an additional runtime library for C++ programs + built with the GNU compiler. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl +')`'dnl lib64cxx + +ifenabled(`c++dev',` +Package: libstdc++CXX_SO`'PV-dev`'LS +Architecture: ifdef(`TARGET',`all',`any') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: ifdef(`TARGET',`extra',PRI(optional)) +Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${misc:Depends} +ifdef(`TARGET',`',`dnl native +Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev +Suggests: libstdc++CXX_SO`'PV-doc +')`'dnl native +Provides: libstdc++-dev`'LS`'dnl +ifdef(`TARGET',`, libstdc++-dev-TARGET-dcv1, libstdc++CXX_SO-dev-TARGET-dcv1 +',` +')`'dnl +Description: The GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the headers and static library files necessary for + building C++ programs which use libstdc++. + . + libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which + was included up to g++-2.95. The first version of libstdc++-v3 appeared + in g++-3.0. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libstdc++CXX_SO`'PV-pic`'LS +Architecture: ifdef(`TARGET',`all',`any') +Section: ifdef(`TARGET',`devel',`libdevel') +Priority: extra +Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${misc:Depends} +ifdef(`TARGET',`Provides: libstdc++CXX_SO-pic-TARGET-dcv1 +',`')`'dnl +Description: The GNU Standard C++ Library v3 (shared library subset kit)`'ifdef(`TARGET)',` (TARGET)', `') + This is used to develop subsets of the libstdc++ shared libraries for + use on custom installation floppies and in embedded systems. + . + Unless you are making one of those, you will not need this package. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: libstdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`all',`any') +Section: debug +Priority: extra +Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: libstdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Recommends: libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}) +Conflicts: libstdc++5-dbg`'LS, libstdc++5-3.3-dbg`'LS, libstdc++6-dbg`'LS, libstdc++6-4.0-dbg`'LS +Description: The GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib32stdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`all',`biarch32_archs') +Section: debug +Priority: extra +Depends: BASEDEP, lib32stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Conflicts: lib32stdc++6-dbg`'LS, lib32stdc++6-4.0-dbg`'LS +Description: The GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +Package: lib64stdc++CXX_SO`'PV-dbg`'LS +Architecture: ifdef(`TARGET',`all',`biarch64_archs') +Section: debug +Priority: extra +Depends: BASEDEP, lib64stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-dbg-TARGET-dcv1 +',`')`'dnl +Conflicts: lib64stdc++6-dbg`'LS, lib64stdc++6-4.0-dbg`'LS +Description: The GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `') + This package contains the shared library of libstdc++ compiled with + debugging symbols. +ifdef(`TARGET', `dnl + . + This package contains files for TARGET architecture, for use in cross-compile + environment. +')`'dnl + +ifdef(`TARGET', `', ` +Package: libstdc++CXX_SO`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends} +Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, libstdc++6-4.0-doc +Description: The GNU Standard C++ Library v3 (documentation files) + This package contains documentation files for the GNU stdc++ library. + . + One set is the distribution documentation, the other set is the + source documentation including a namespace list, class hierarchy, + alphabetical list, compound list, file list, namespace members, + compound members and file members. +')`'dnl native +')`'dnl c++dev +')`'dnl c++ + +ifenabled(`ada',` +Package: gnat`'-GNAT_V +Architecture: any +Priority: PRI(optional) +Depends: gnat`'PV-base (= ${gnat:Version}), gcc`'PV (>= ${gcc:Version}), ${dep:libgnat}, ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: gnat`'PV-doc, ada-reference-manual +Provides: ada-compiler +Conflicts: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-3.5, gnat-4.0, gnat-4.2 +Description: The GNU Ada compiler + This is the GNU Ada compiler, which compiles Ada on platforms supported + by the gcc compiler. It uses the gcc backend to generate optimized code. + +ifenabled(`libgnat',` +Package: libgnat`'-GNAT_V +Section: libs +Architecture: any +Priority: PRI(optional) +Depends: gnat`'PV-base (= ${gnat:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Ada applications + Library needed for GNU Ada applications linked against the shared library. + +Package: libgnat`'-GNAT_V-dbg +Section: debug +Architecture: any +Priority: extra +Depends: gnat`'PV-base, libgnat`'-GNAT_V, ${misc:Depends} +Recommends: gnat-gdb (>= 6.4) +Description: Runtime library for GNU Ada applications + Debugging symbols for the library needed for GNU Ada applications linked + against the shared library. + +Package: libgnatvsn`'GNAT_V-dev +Section: libdevel +Architecture: any +Priority: PRI(optional) +Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends} +Conflicts: libgnatvsn-dev (<< 4.1.2-19) +Description: GNU Ada compiler version library - development files + This library exports selected components of GNAT, the GNU Ada compiler, for use + in other packages, most notably ASIS and ASIS-based packages. It is licensed + under the GNAT-Modified GPL, allowing to link proprietary programs with it. + . + This package contains the development files and static library. + +Package: libgnatvsn`'GNAT_V +Architecture: any +Priority: PRI(optional) +Section: libs +Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), ${misc:Depends} +Description: GNU Ada compiler version library + This library exports selected components of GNAT, the GNU Ada compiler, for use + in other packages, most notably ASIS and ASIS-based packages. It is licensed + under the GNAT-Modified GPL, allowing to link proprietary programs with it. + . + This package contains the run-time shared library. + +Package: libgnatvsn`'GNAT_V-dbg +Architecture: any +Priority: extra +Section: debug +Depends: gnat`'PV-base, libgnatvsn`'GNAT_V, ${misc:Depends} +Recommends: gnat-gdb (>= 6.4) +Description: GNU Ada compiler version library + This library exports selected components of GNAT, the GNU Ada compiler, for use + in other packages, most notably ASIS and ASIS-based packages. It is licensed + under the GNAT-Modified GPL, allowing to link proprietary programs with it. + . + This package contains the debugging symbols for the run-time shared library. + +Package: libgnatprj`'GNAT_V-dev +Section: libdevel +Architecture: any +Priority: PRI(optional) +Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), libgnatprj`'GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V-dev (= ${gnat:Version}), ${misc:Depends} +Conflicts: libgnatprj-dev (<< 4.1.2-19) +Description: GNU Ada Project Manager development files + GNAT, the GNU Ada compiler, uses project files to organise source and object + files in large-scale development efforts. Several other tools, such as + ASIS tools (package asis-programs) and GNAT Programming Studio (package + gnat-gps) also use project files. This library contains the necessary + support; it was built from GNAT itself. It is licensed under the pure GPL; + all programs that use it must also be distributed under the GPL, or not + distributed at all. + . + This package contains development files: install it to develop applications + that understand GNAT project files. + +Package: libgnatprj`'GNAT_V +Architecture: any +Priority: PRI(optional) +Section: libs +Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends} +Description: GNU Ada Project Manager + GNAT, the GNU Ada compiler, uses project files to organise source and object + files in large-scale development efforts. Several other tools, such as + ASIS tools (package asis-programs) and GNAT Programming Studio (package + gnat-gps) also use project files. This library contains the necessary + support; it was built from GNAT itself. It is licensed under the pure GPL; + all programs that use it must also be distributed under the GPL, or not + distributed at all. + . + This package contains the run-time shared library. + +Package: libgnatprj`'GNAT_V-dbg +Architecture: any +Priority: extra +Section: debug +Depends: gnat`'PV-base, libgnatprj`'GNAT_V, ${misc:Depends} +Recommends: gnat-gdb (>= 6.4) +Description: GNU Ada Project Manager + GNAT, the GNU Ada compiler, uses project files to organise source and object + files in large-scale development efforts. Several other tools, such as + ASIS tools (package asis-programs) and GNAT Programming Studio (package + gnat-gps) also use project files. This library contains the necessary + support; it was built from GNAT itself. It is licensed under the pure GPL; + all programs that use it must also be distributed under the GPL, or not + distributed at all. + . + This package contains the debugging symbols for the run-time shared library. +')`'dnl libgnat + +ifenabled(`lib64gnat',` +Package: lib64gnat`'-GNAT_V +Section: libs +Architecture: biarch64_archs +Priority: PRI(optional) +Depends: gnat`'PV-base (= ${gnat:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends} +Description: Runtime library for GNU Ada applications + Library needed for GNU Ada applications linked against the shared library. +')`'dnl libgnat + +ifenabled(`gfdldoc',` +Package: gnat`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: SOFTBASEDEP, ${misc:Depends} +Suggests: gnat`'PV +Description: Documentation for the GNU Ada compiler (gnat) + Documentation for the GNU Ada compiler in info `format'. +')`'dnl gfdldoc +')`'dnl ada + +ifenabled(`pascal',` +Package: gpc`'PV +Architecture: any +Priority: PRI(optional) +Depends: SOFTBASEDEP, gcc`'PV (>= ${gcc:SoftVersion}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends} +Recommends: libgmp3-dev, libncurses5-dev +Suggests: gpc`'PV-doc (>= ${gpc:Version}) +Provides: pascal-compiler +Description: The GNU Pascal compiler + This is the GNU Pascal compiler, which compiles Pascal on platforms supported + by the gcc compiler. It uses the gcc backend to generate optimized code. +Homepage: http://www.gnu-pascal.de/gpc/h-index.html + +Package: gpc`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: SOFTBASEDEP, dpkg (>= 1.15.4) | install-info, ${misc:Depends} +Replaces: gpc (<= 2.91.58-3) +Suggests: gpc`'PV +Description: Documentation for the GNU Pascal compiler (gpc) + Documentation for the GNU Pascal compiler in info `format'. + . + WARNING: the integration of gpc into gcc-4.x is still in an experimental + stage. For production use, please use gpc or gpc-2.1-3.4. +Homepage: http://www.gnu-pascal.de/gpc/h-index.html +')`'dnl pascal + +ifenabled(`d ',` +Package: gdc`'PV`'TS +Architecture: any +Priority: PRI(optional) +Depends: SOFTBASEDEP, g++`'PV`'TS (>= ${gcc:SoftVersion}), libphobos`'PHOBOS_V`'PV`'TS-dev (= ${gdc:Version}) [libphobos_no_archs], ${shlibs:Depends}, ${misc:Depends} +Provides: d-compiler`'TS +Description: The D compiler + This is the D compiler, which compiles D on platforms supported by the gcc + compiler. It uses the GCC backend to generate optimised code. + . +Homepage: http://dgcc.sourceforge.net/ + +ifenabled(`libphobos',` +Package: libphobos`'PHOBOS_V`'PV`'TS-dev +Architecture: any +Section: libdevel +Priority: PRI(optional) +Depends: ${shlibs:Depends}, gdc`'PV`'TS (= ${gdc:Version}), zlib1g-dev (>= 1:1.2.3.3), ${misc:Depends} +Provides: libphobos`'PHOBOS_V`'TS-dev +Replaces: gdc-4.1`'TS (<< 0.25-4.1.2-17) +Description: The phobos D standard library + This is the Phobos standard library that comes with the D compiler. + . +Homepage: http://www.digitalmars.com/d/phobos/phobos.html +')`'dnl libphobos +')`'dnl d + +ifdef(`TARGET',`',`dnl +ifenabled(`libs',` +Package: gcc`'PV-soft-float +Architecture: arm armeb +Priority: PRI(optional) +Depends: BASEDEP, ifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}, ${misc:Depends} +Replaces: gcc-soft-float-ss +Description: The soft-floating-point gcc libraries (arm) + These are versions of basic static libraries such as libgcc.a compiled + with the -msoft-float option, for CPUs without a floating-point unit. +')`'dnl commonlibs +')`'dnl + +ifenabled(`fixincl',` +Package: fixincludes +Architecture: any +Priority: PRI(optional) +Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Fix non-ANSI header files + FixIncludes was created to fix non-ANSI system header files. Many + system manufacturers supply proprietary headers that are not ANSI compliant. + The GNU compilers cannot compile non-ANSI headers. Consequently, the + FixIncludes shell script was written to fix the header files. + . + Not all packages with header files are installed on the system, when the + package is built, so we make fixincludes available at build time of other + packages, such that checking tools like lintian can make use of it. +')`'dnl fixincl + +ifenabled(`cdev',` +ifdef(`TARGET', `', ` +ifenabled(`gfdldoc',` +Package: gcc`'PV-doc +Architecture: all +Section: doc +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends} +Conflicts: gcc-docs (<< 2.95.2) +Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2) +Description: Documentation for the GNU compilers (gcc, gobjc, g++) + Documentation for the GNU compilers in info `format'. +')`'dnl gfdldoc +')`'dnl native +')`'dnl cdev + +ifdef(`TARGET',`',`dnl +ifenabled(`libnof',` +Package: gcc`'PV-nof +Architecture: powerpc +Priority: PRI(optional) +Depends: BASEDEP, ${shlibs:Depends}ifenabled(`cdev',`, gcc`'PV (= ${gcc:Version})'), ${misc:Depends} +Conflicts: gcc-3.2-nof +Description: The no-floating-point gcc libraries (powerpc) + These are versions of basic static libraries such as libgcc.a compiled + with the -msoft-float option, for CPUs without a floating-point unit. +')`'dnl libnof +')`'dnl + +ifenabled(`source',` +Package: gcc`'PV-source +Architecture: all +Priority: PRI(optional) +Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), make (>= 3.81), ${misc:Depends} +Description: Source of the GNU Compiler Collection + This package contains the sources and patches which are needed to + build the GNU Compiler Collection (GCC). +')`'dnl source +dnl +')`'dnl gcc-X.Y +dnl last line in file --- gpc-4.1-2.1-4.1.2.orig/debian/gcc-BV-base.postinst +++ gpc-4.1-2.1-4.1.2/debian/gcc-BV-base.postinst @@ -0,0 +1,15 @@ +#! /bin/sh -e + +case "$1" in + configure) + # see #355439, packaging error in 4.0.2-9* + docdir=/usr/share/doc/gcc-@BV@-base + if [ ! -f $docdir/copyright ]; then + ln $docdir/.copyright $docdir/copyright + fi + if [ ! -f $docdir/changelog.Debian.gz ]; then + ln $docdir/.changelog.Debian.gz $docdir/changelog.Debian.gz + fi +esac + +#DEBHELPER# --- gpc-4.1-2.1-4.1.2.orig/debian/NEWS.gcc +++ gpc-4.1-2.1-4.1.2/debian/NEWS.gcc @@ -0,0 +1,674 @@ +GCC 4.1 Release SeriesChanges, New Features, and Fixes +====================================================== + +The latest release in the 4.1 release series is GCC 4.1.2. + + +Caveats +======= + + +General Optimizer Improvements +============================== + + +- GCC now has infrastructure for inter-procedural optimizations and + the following inter-procedural optimizations are implemented: + + - Profile guided inlining. When doing profile feedback guided + optimization, GCC can now use the profile to make better informed + decisions on whether inlining of a function is profitable or not. + This means that GCC will no longer inline functions at call sites + that are not executed very often, and that functions at hot call + sites are more likely to be inlined. + + A new parameter min-inline-recursive-probability is also now + available to throttle recursive inlining of functions with small + average recursive depths. + + - Discovery of pure and const functions, a form of side-effects + analysis. While older GCC releases could also discover such special + functions, the new IPA-based pass runs earlier so that the results + are available to more optimizers. The pass is also simply more + powerful than the old one. + + - Analysis of references to static variables and type escape + analysis, also forms of side-effects analysis. The results of these + passes allow the compiler to be less conservative about + call-clobbered variables and references. This results in more + redundant loads being eliminated and in making static variables + candidates for register promotion. + + - Improvement of RTL-based alias analysis. The results of type + escape analysis are fed to the RTL type-based alias analyzer, + allowing it to disambiguate more memory references. + + - Interprocedural constant propagation and function versioning. + This pass looks for functions that are always called with the same + constant value for one or more of the function arguments, and + propagates those constants into those functions. + + - GCC will now eliminate static variables whose usage was optimized out. + + - -fwhole-program --combine can now be used to make all functions in + program static allowing whole program optimization. As an + exception, the main function and all functions marked with the new + externally_visible attribute are kept global so that programs can + link with runtime libraries. + + +- GCC can now do a form of partial dead code elimination (PDCE) that + allows code motion of expressions to the paths where the result of the + expression is actually needed. This is not always a win, so the pass + has been limited to only consider profitable cases. Here is an example: + + int foo (int *, int *); + int + bar (int d) + { + int a, b, c; + b = d + 1; + c = d + 2; + a = b + c; + if (d) + { + foo (&b, &c); + a = b + c; + } + printf ("%d\n", a); + } + + + The a = b + c can be sunk to right before the printf. Normal code + sinking will not do this, it will sink the first one above into the + else-branch of the conditional jump, which still gives you two + copies of the code. + +- GCC now has a value range propagation pass. This allows the + compiler to eliminate bounds checks and branches. The results of the + pass can also be used to accurately compute branch probabilities. + +- The pass to convert PHI nodes to straight-line code (a form of + if-conversion for GIMPLE) has been improved significantly. The two + most significant improvements are an improved algorithm to determine + the order in which the PHI nodes are considered, and an improvement + that allow the pass to consider if-conversions of basic blocks with + more than two predecessors. + +- Alias analysis improvements. GCC can now differentiate between + different fields of structures in Tree-SSA's virtual operands + form. This lets stores/loads from non-overlapping structure fields not + conflict. A new algorithm to compute points-to sets was contributed + that can allows GCC to see now that p->a and p->b, where p is a + pointer to a structure, can never point to the same field. + +- Various enhancements to auto-vectorization: + + - Incrementally preserve SSA form when vectorizing. + + - Incrementally preserve loop-closed form when vectorizing. + + - Improvements to peeling for alignment: generate better code when + the misalignment of an access is known at compile time, or when + different accesses are known to have the same misalignment, even if + the misalignment amount itself is unknown. + + - Consider dependence distance in the vectorizer. + + - Externalize generic parts of data reference analysis to make this + analysis available to other passes. + + - Vectorization of conditional code. + + - Reduction support. + +- GCC can now partition functions in sections of hot and cold + code. This can significantly improve performance due to better + instruction cache locality. This feature works best together with + profile feedback driven optimization. + +- A new pass to avoid saving of unneeded arguments to the stack in + vararg functions if the compiler can prove that they will not be + needed. + +- Transition of basic block profiling to tree level implementation has + been completed. The new implementation should be considerably more + reliable (hopefully avoiding profile mismatch errors when using + -fprofile-use or -fbranch-probabilities) and can be used to drive + higher level optimizations, such as inlining. + + The -ftree-based-profiling command line option was removed and + -fprofile-use now implies disabling old RTL level loop optimizer + (-fno-loop-optimize). Speculative prefetching optimization + (originally enabled by -fspeculative-prefetching) was removed. + + +New Languages and Language specific improvements +================================================ + +C and Objective-C +----------------- + +- The old Bison-based C and Objective-C parser has been replaced by a + new, faster hand-written recursive-descent parser. + + +Ada +--- + +- The build infrastructure for the Ada runtime library and tools has + been changed to be better integrated with the rest of the build + infrastructure of GCC. This should make doing cross builds of Ada a + bit easier. + + +C++ +--- + +- ARM-style name-injection of friend declarations is no longer the + default. For example: + + struct S { + friend void f(); + }; + + void g() { f(); } + + will not be accepted; instead a declaration of f will need to be + present outside of the scope of S. The new -ffriend-injection + option will enable the old behavior. + + +- The (undocumented) extension which permitted templates with default + arguments to be bound to template template parameters with fewer + parameters has been deprecated, and will be removed in the next major + release of G++. For example: + + template