From 5c77c5df76637b93450ea363984ab48d0fd3d93b Mon Sep 17 00:00:00 2001 From: Jens Maus Date: Thu, 26 Mar 2015 08:15:01 +0000 Subject: [PATCH] - checkin of certain files being automatically generated with newer version of flex/bison&co. --- binutils/doc/cxxfilt.man | 65 +- binutils/doc/strings.1 | 65 +- gas/doc/as.1 | 103 +- gas/m68k-parse.c | 3350 ++++++++++++++++++++++---------------- ld/ld.1 | 155 +- ld/ldlex.c | 260 ++- 6 files changed, 2288 insertions(+), 1710 deletions(-) diff --git a/binutils/doc/cxxfilt.man b/binutils/doc/cxxfilt.man index 2f97535..52b5e1c 100644 --- a/binutils/doc/cxxfilt.man +++ b/binutils/doc/cxxfilt.man @@ -1,15 +1,7 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp @@ -25,11 +17,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -46,23 +38,36 @@ . ds PI \(*p . ds L" `` . ds R" '' +. ds C` +. ds C' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} .\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{ +. if \nF \{ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +133,11 @@ .\" ======================================================================== .\" .IX Title "C++FILT 1" -.TH C++FILT 1 "2003-04-27" "binutils-2.13.90" "GNU Development Tools" +.TH C++FILT 1 "2014-11-14" "binutils-2.14" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" cxxfilt \- Demangle C++ and Java symbols. .SH "SYNOPSIS" @@ -208,7 +217,7 @@ Automatic selection based on executable (the default method) .ie n .IP """gnu""" 4 .el .IP "\f(CWgnu\fR" 4 .IX Item "gnu" -the one used by the \s-1GNU\s0 \*(C+ compiler (g++) +the one used by the \s-1GNU \*(C+\s0 compiler (g++) .ie n .IP """lucid""" 4 .el .IP "\f(CWlucid\fR" 4 .IX Item "lucid" @@ -228,7 +237,7 @@ the one used by the \s-1EDG\s0 compiler .ie n .IP """gnu\-v3""" 4 .el .IP "\f(CWgnu\-v3\fR" 4 .IX Item "gnu-v3" -the one used by the \s-1GNU\s0 \*(C+ compiler (g++) with the V3 \s-1ABI\s0. +the one used by the \s-1GNU \*(C+\s0 compiler (g++) with the V3 \s-1ABI.\s0 .ie n .IP """java""" 4 .el .IP "\f(CWjava\fR" 4 .IX Item "java" diff --git a/binutils/doc/strings.1 b/binutils/doc/strings.1 index 09f2323..921edbc 100644 --- a/binutils/doc/strings.1 +++ b/binutils/doc/strings.1 @@ -1,15 +1,7 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp @@ -25,11 +17,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -46,23 +38,36 @@ . ds PI \(*p . ds L" `` . ds R" '' +. ds C` +. ds C' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} .\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{ +. if \nF \{ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +133,11 @@ .\" ======================================================================== .\" .IX Title "STRINGS 1" -.TH STRINGS 1 "2003-04-27" "binutils-2.13.90" "GNU Development Tools" +.TH STRINGS 1 "2014-11-14" "binutils-2.14" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" strings \- print the strings of printable characters in files. .SH "SYNOPSIS" @@ -142,7 +151,7 @@ strings [\fB\-afov\fR] [\fB\-\fR\fImin-len\fR] [\fB\-\-help\fR] [\fB\-\-version\fR] \fIfile\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" -For each \fIfile\fR given, \s-1GNU\s0 \fBstrings\fR prints the printable +For each \fIfile\fR given, \s-1GNU \s0\fBstrings\fR prints the printable character sequences that are at least 4 characters long (or the number given with the options below) and are followed by an unprintable character. By default, it only prints the strings from the initialized @@ -205,7 +214,7 @@ octal, \fBx\fR for hexadecimal, or \fBd\fR for decimal. .PD Select the character encoding of the strings that are to be found. Possible values for \fIencoding\fR are: \fBs\fR = single\-7\-bit\-byte -characters (\s-1ASCII\s0, \s-1ISO\s0 8859, etc., default), \fBS\fR = +characters (\s-1ASCII, ISO 8859,\s0 etc., default), \fBS\fR = single\-8\-bit\-byte characters, \fBb\fR = 16\-bit bigendian, \fBl\fR = 16\-bit littleendian, \fBB\fR = 32\-bit bigendian, \fBL\fR = 32\-bit littleendian. Useful for finding wide character strings. diff --git a/gas/doc/as.1 b/gas/doc/as.1 index c652a20..2d8f6ce 100644 --- a/gas/doc/as.1 +++ b/gas/doc/as.1 @@ -1,15 +1,7 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp @@ -25,11 +17,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -46,23 +38,36 @@ . ds PI \(*p . ds L" `` . ds R" '' +. ds C` +. ds C' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} .\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{ +. if \nF \{ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +133,11 @@ .\" ======================================================================== .\" .IX Title "AS 1" -.TH AS 1 "2003-06-12" "binutils-2.14" "GNU Development Tools" +.TH AS 1 "2015-03-25" "binutils-2.14" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" AS \- the portable GNU assembler. .SH "SYNOPSIS" @@ -229,7 +238,7 @@ as [\fB\-a\fR[\fBcdhlns\fR][=\fIfile\fR]] [\fB\-D\fR] [\fB\-\-defsym\fR \fIsym\f \&\fITarget \s-1PDP11\s0 options:\fR [\fB\-mpic\fR|\fB\-mno\-pic\fR] [\fB\-mall\fR] [\fB\-mno\-extensions\fR] [\fB\-m\fR\fIextension\fR|\fB\-mno\-\fR\fIextension\fR] - [\fB\-m\fR\fIcpu\fR] [\fB\-m\fR\fImachine\fR] + [\fB\-m\fR\fIcpu\fR] [\fB\-m\fR\fImachine\fR] .PP \&\fITarget picoJava options:\fR [\fB\-mb\fR|\fB\-me\fR] @@ -260,7 +269,7 @@ as [\fB\-a\fR[\fBcdhlns\fR][=\fIfile\fR]] [\fB\-D\fR] [\fB\-\-defsym\fR \fIsym\f [\fB\-\-[no\-]target\-align\fR] [\fB\-\-[no\-]longcalls\fR] .SH "DESCRIPTION" .IX Header "DESCRIPTION" -\&\s-1GNU\s0 \fBas\fR is really a family of assemblers. +\&\s-1GNU \s0\fBas\fR is really a family of assemblers. If you use (or have used) the \s-1GNU\s0 assembler on one architecture, you should find a fairly similar environment when you use it on another architecture. Each version has much in common with the others, @@ -268,8 +277,8 @@ including object file formats, most assembler directives (often called \&\fIpseudo-ops\fR) and assembler syntax. .PP \&\fBas\fR is primarily intended to assemble the output of the -\&\s-1GNU\s0 C compiler for use by the linker -\&. Nevertheless, we've tried to make \fBas\fR +\&\s-1GNU C\s0 compiler \f(CW\*(C`\*(C'\fR for use by the linker +\&\f(CW\*(C`\*(C'\fR. Nevertheless, we've tried to make \fBas\fR assemble correctly everything that other assemblers for the same machine would assemble. Any exceptions are documented explicitly. @@ -303,13 +312,13 @@ runs \fBas\fR automatically. Warnings report an assumption made so that \fBas\fR could keep assembling a flawed program; errors report a grave problem that stops the assembly. .PP -If you are invoking \fBas\fR via the \s-1GNU\s0 C compiler, +If you are invoking \fBas\fR via the \s-1GNU C\s0 compiler, you can use the \fB\-Wa\fR option to pass arguments through to the assembler. The assembler arguments must be separated from each other (and the \fB\-Wa\fR) by commas. For example: .PP .Vb 1 -\& gcc -c -g -O -Wa,-alh,-L file.c +\& gcc \-c \-g \-O \-Wa,\-alh,\-L file.c .Ve .PP This passes two options to the assembler: \fB\-alh\fR (emit a listing to @@ -558,11 +567,11 @@ is normally the M32R, but this option changes it to the M32RX. .IP "\fB\-\-warn\-explicit\-parallel\-conflicts or \-\-Wp\fR" 4 .IX Item "--warn-explicit-parallel-conflicts or --Wp" Produce warning messages when questionable parallel constructs are -encountered. +encountered. .IP "\fB\-\-no\-warn\-explicit\-parallel\-conflicts or \-\-Wnp\fR" 4 .IX Item "--no-warn-explicit-parallel-conflicts or --Wnp" Do not produce warning messages when questionable parallel constructs are -encountered. +encountered. .PP The following options are available when as is configured for the Motorola 68000 series. @@ -595,7 +604,7 @@ For details about the \s-1PDP\-11\s0 machine dependent features options, see \f(CW@ref\fR{PDP\-11\-Options}. .IP "\fB\-mpic | \-mno\-pic\fR" 4 .IX Item "-mpic | -mno-pic" -Generate position-independent (or position\-dependent) code. The +Generate position-independent (or position-dependent) code. The default is \fB\-mpic\fR. .IP "\fB\-mall\fR" 4 .IX Item "-mall" @@ -612,7 +621,7 @@ Disable all instruction set extensions. Enable (or disable) a particular instruction set extension. .IP "\fB\-m\fR\fIcpu\fR" 4 .IX Item "-mcpu" -Enable the instruction set extensions supported by a particular \s-1CPU\s0, and +Enable the instruction set extensions supported by a particular \s-1CPU,\s0 and disable all other extensions. .IP "\fB\-m\fR\fImachine\fR" 4 .IX Item "-mmachine" @@ -636,16 +645,16 @@ Specify what processor is the target. The default is defined by the configuration option when building the assembler. .IP "\fB\-mshort\fR" 4 .IX Item "-mshort" -Specify to use the 16\-bit integer \s-1ABI\s0. +Specify to use the 16\-bit integer \s-1ABI.\s0 .IP "\fB\-mlong\fR" 4 .IX Item "-mlong" -Specify to use the 32\-bit integer \s-1ABI\s0. +Specify to use the 32\-bit integer \s-1ABI. \s0 .IP "\fB\-mshort\-double\fR" 4 .IX Item "-mshort-double" -Specify to use the 32\-bit double \s-1ABI\s0. +Specify to use the 32\-bit double \s-1ABI. \s0 .IP "\fB\-mlong\-double\fR" 4 .IX Item "-mlong-double" -Specify to use the 64\-bit double \s-1ABI\s0. +Specify to use the 64\-bit double \s-1ABI. \s0 .IP "\fB\-\-force\-long\-branchs\fR" 4 .IX Item "--force-long-branchs" Relative branches are turned into absolute ones. This concerns @@ -683,7 +692,7 @@ Explicitly select a variant of the \s-1SPARC\s0 architecture. \&\fB\-Av8plus\fR and \fB\-Av8plusa\fR select a 32 bit environment. \&\fB\-Av9\fR and \fB\-Av9a\fR select a 64 bit environment. .Sp -\&\fB\-Av8plusa\fR and \fB\-Av9a\fR enable the \s-1SPARC\s0 V9 instruction set with +\&\fB\-Av8plusa\fR and \fB\-Av9a\fR enable the \s-1SPARC V9\s0 instruction set with UltraSPARC extensions. .IP "\fB\-xarch=v8plus | \-xarch=v8plusa\fR" 4 .IX Item "-xarch=v8plus | -xarch=v8plusa" @@ -694,7 +703,7 @@ equivalent to \-Av8plus and \-Av8plusa, respectively. Warn when the assembler switches to another architecture. .PP The following options are available when as is configured for the 'c54x -architecture. +architecture. .IP "\fB\-mfar\-mode\fR" 4 .IX Item "-mfar-mode" Enable extended addressing mode. All addresses and relocations will assume @@ -744,7 +753,7 @@ alias for \fB\-march=r6000\fR, \fB\-mips3\fR is an alias for \&\fB\-march=r4000\fR and \fB\-mips4\fR is an alias for \fB\-march=r8000\fR. \&\fB\-mips5\fR, \fB\-mips32\fR, \fB\-mips32r2\fR, and \fB\-mips64\fR correspond to generic -\&\fB\s-1MIPS\s0 V\fR, \fB\s-1MIPS32\s0\fR, \fB\s-1MIPS32\s0 Release 2\fR, and +\&\fB\s-1MIPS V\s0\fR, \fB\s-1MIPS32\s0\fR, \fB\s-1MIPS32\s0 Release 2\fR, and \&\fB\s-1MIPS64\s0\fR \s-1ISA\s0 processors, respectively. .IP "\fB\-march=\fR\fI\s-1CPU\s0\fR" 4 @@ -768,14 +777,14 @@ of an mfhi or mflo instruction occurs in the following two instructions. .IX Item "-no-mdebug" .PD Cause stabs-style debugging output to go into an ECOFF-style .mdebug -section instead of the standard \s-1ELF\s0 .stabs sections. +section instead of the standard \s-1ELF \s0.stabs sections. .IP "\fB\-mgp32\fR" 4 .IX Item "-mgp32" .PD 0 .IP "\fB\-mfp32\fR" 4 .IX Item "-mfp32" .PD -The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI\s0, but these +The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI,\s0 but these flags force a certain group of registers to be treated as 32 bits wide at all times. \fB\-mgp32\fR controls the size of general-purpose registers and \fB\-mfp32\fR controls the size of floating-point registers. @@ -785,7 +794,7 @@ and \fB\-mfp32\fR controls the size of floating-point registers. .IP "\fB\-no\-mips16\fR" 4 .IX Item "-no-mips16" .PD -Generate code for the \s-1MIPS\s0 16 processor. This is equivalent to putting +Generate code for the \s-1MIPS 16\s0 processor. This is equivalent to putting \&\f(CW\*(C`.set mips16\*(C'\fR at the start of the assembly file. \fB\-no\-mips16\fR turns off this option. .IP "\fB\-mips3d\fR" 4 @@ -832,7 +841,7 @@ in the name. Using \fB\-EB\fR or \fB\-EL\fR will override the endianness selection in any case. .Sp This option is currently supported only when the primary target -\&\fBas\fR is configured for is a \s-1MIPS\s0 \s-1ELF\s0 or \s-1ECOFF\s0 target. +\&\fBas\fR is configured for is a \s-1MIPS ELF\s0 or \s-1ECOFF\s0 target. Furthermore, the primary target or others specified with \&\fB\-\-enable\-targets=...\fR at configuration time must include support for the other format, if both are to be available. For example, the Irix 5 diff --git a/gas/m68k-parse.c b/gas/m68k-parse.c index 12bf1b7..50c3403 100644 --- a/gas/m68k-parse.c +++ b/gas/m68k-parse.c @@ -1,21 +1,68 @@ -/* A Bison parser, made from m68k-parse.y - by GNU bison 1.35. */ +/* A Bison parser, made by GNU Bison 3.0.2. */ -#define YYBISON 1 /* Identify Bison output. */ +/* Bison implementation for Yacc-like parsers in C -# define DR 257 -# define AR 258 -# define FPR 259 -# define FPCR 260 -# define LPC 261 -# define ZAR 262 -# define ZDR 263 -# define LZPC 264 -# define CREG 265 -# define INDEXREG 266 -# define EXPR 267 + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. -#line 27 "m68k-parse.y" + 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 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. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* 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 LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "3.0.2" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + + + +/* Copy the first part of user declarations. */ +#line 27 "m68k-parse.y" /* yacc.c:339 */ #include "as.h" @@ -82,34 +129,356 @@ static void yyerror PARAMS ((const char *)); static struct m68k_op *op; -#line 94 "m68k-parse.y" -#ifndef YYSTYPE -typedef union +#line 133 "y.tab.c" /* yacc.c:339 */ + +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + + +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + DR = 258, + AR = 259, + FPR = 260, + FPCR = 261, + LPC = 262, + ZAR = 263, + ZDR = 264, + LZPC = 265, + CREG = 266, + INDEXREG = 267, + EXPR = 268 + }; +#endif +/* Tokens. */ +#define DR 258 +#define AR 259 +#define FPR 260 +#define FPCR 261 +#define LPC 262 +#define ZAR 263 +#define ZDR 264 +#define LZPC 265 +#define CREG 266 +#define INDEXREG 267 +#define EXPR 268 + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE YYSTYPE; +union YYSTYPE { +#line 95 "m68k-parse.y" /* yacc.c:355 */ + struct m68k_indexreg indexreg; enum m68k_register reg; struct m68k_exp exp; unsigned long mask; int onereg; -} yystype; -# define YYSTYPE yystype + +#line 204 "y.tab.c" /* yacc.c:355 */ +}; # define YYSTYPE_IS_TRIVIAL 1 -#endif -#ifndef YYDEBUG -# define YYDEBUG 0 +# define YYSTYPE_IS_DECLARED 1 #endif +extern YYSTYPE yylval; -#define YYFINAL 173 -#define YYFLAG -32768 -#define YYNTBASE 25 +int yyparse (void); -/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 267 ? yytranslate[x] : 44) -/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ -static const char yytranslate[] = + +/* Copy the second part of user declarations. */ + +#line 219 "y.tab.c" /* yacc.c:358 */ + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# 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 + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 40 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 207 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 25 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 20 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 85 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 173 + +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 268 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ +static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -136,457 +505,264 @@ static const char yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13 + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13 }; #if YYDEBUG -static const short yyprhs[] = + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = { - 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, - 18, 21, 24, 26, 30, 35, 40, 46, 52, 57, - 61, 65, 69, 77, 85, 92, 98, 105, 111, 118, - 124, 130, 135, 145, 153, 162, 169, 180, 189, 200, - 209, 218, 221, 225, 229, 235, 242, 253, 263, 274, - 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, - 296, 298, 300, 302, 303, 305, 307, 309, 310, 313, - 314, 317, 318, 321, 323, 327, 331, 333, 335, 339, - 343, 347, 349, 351, 353 -}; -static const short yyrhs[] = -{ - 26, 0, 27, 0, 28, 0, 3, 0, 4, 0, - 5, 0, 6, 0, 11, 0, 13, 0, 14, 13, - 0, 15, 13, 0, 40, 0, 16, 4, 17, 0, - 16, 4, 17, 18, 0, 19, 16, 4, 17, 0, - 16, 13, 20, 34, 17, 0, 16, 34, 20, 13, - 17, 0, 13, 16, 34, 17, 0, 16, 7, 17, - 0, 16, 8, 17, 0, 16, 10, 17, 0, 16, - 13, 20, 34, 20, 29, 17, 0, 16, 13, 20, - 34, 20, 36, 17, 0, 16, 13, 20, 30, 37, - 17, 0, 16, 30, 20, 13, 17, 0, 13, 16, - 34, 20, 29, 17, 0, 16, 34, 20, 29, 17, - 0, 13, 16, 34, 20, 36, 17, 0, 16, 34, - 20, 36, 17, 0, 13, 16, 30, 37, 17, 0, - 16, 30, 37, 17, 0, 16, 21, 13, 37, 22, - 20, 29, 38, 17, 0, 16, 21, 13, 37, 22, - 38, 17, 0, 16, 21, 34, 22, 20, 29, 38, - 17, 0, 16, 21, 34, 22, 38, 17, 0, 16, - 21, 13, 20, 34, 20, 29, 22, 38, 17, 0, - 16, 21, 34, 20, 29, 22, 38, 17, 0, 16, - 21, 13, 20, 34, 20, 36, 22, 38, 17, 0, - 16, 21, 34, 20, 36, 22, 38, 17, 0, 16, - 21, 39, 30, 37, 22, 38, 17, 0, 35, 23, - 0, 35, 23, 18, 0, 35, 23, 19, 0, 35, - 23, 16, 13, 17, 0, 35, 23, 16, 39, 29, - 17, 0, 35, 23, 16, 13, 17, 23, 16, 39, - 29, 17, 0, 35, 23, 16, 13, 17, 23, 16, - 13, 17, 0, 35, 23, 16, 39, 29, 17, 23, - 16, 13, 17, 0, 12, 0, 31, 0, 12, 0, - 32, 0, 32, 0, 4, 0, 8, 0, 3, 0, - 9, 0, 4, 0, 7, 0, 33, 0, 10, 0, - 8, 0, 0, 34, 0, 7, 0, 10, 0, 0, - 20, 34, 0, 0, 20, 13, 0, 0, 13, 20, - 0, 42, 0, 42, 24, 41, 0, 43, 24, 41, - 0, 43, 0, 42, 0, 42, 24, 41, 0, 43, - 24, 41, 0, 43, 19, 43, 0, 3, 0, 4, - 0, 5, 0, 6, 0 -}; - -#endif - -#if YYDEBUG -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const short yyrline[] = -{ - 0, 117, 119, 120, 125, 131, 136, 141, 146, 151, - 156, 161, 166, 178, 184, 189, 194, 204, 214, 224, - 229, 234, 239, 246, 257, 264, 270, 277, 283, 294, - 304, 311, 317, 325, 332, 339, 345, 353, 360, 372, - 383, 395, 404, 412, 420, 430, 437, 445, 452, 465, - 467, 479, 481, 492, 494, 495, 500, 502, 507, 509, - 515, 517, 518, 523, 528, 533, 535, 540, 545, 553, - 559, 567, 573, 581, 583, 587, 598, 603, 604, 608, - 614, 624, 629, 633, 637 + 0, 118, 118, 119, 120, 126, 131, 136, 141, 146, + 151, 156, 161, 166, 179, 184, 189, 194, 204, 214, + 224, 229, 234, 239, 246, 257, 264, 270, 277, 283, + 294, 304, 311, 317, 325, 332, 339, 345, 353, 360, + 372, 383, 396, 404, 412, 420, 430, 437, 445, 452, + 466, 467, 480, 481, 493, 494, 495, 501, 502, 508, + 509, 516, 517, 518, 525, 528, 534, 535, 542, 545, + 555, 559, 569, 573, 582, 583, 587, 599, 603, 604, + 608, 615, 625, 629, 633, 637 }; #endif - -#if (YYDEBUG) || defined YYERROR_VERBOSE - -/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ +#if YYDEBUG || YYERROR_VERBOSE || 0 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$", "error", "$undefined.", "DR", "AR", "FPR", "FPCR", "LPC", "ZAR", - "ZDR", "LZPC", "CREG", "INDEXREG", "EXPR", "'#'", "'&'", "'('", "')'", - "'+'", "'-'", "','", "'['", "']'", "'@'", "'/'", "operand", - "generic_operand", "motorola_operand", "mit_operand", "zireg", "zdireg", - "zadr", "zdr", "apc", "zapc", "optzapc", "zpc", "optczapc", "optcexpr", - "optexprc", "reglist", "ireglist", "reglistpair", "reglistreg", 0 + "$end", "error", "$undefined", "DR", "AR", "FPR", "FPCR", "LPC", "ZAR", + "ZDR", "LZPC", "CREG", "INDEXREG", "EXPR", "'#'", "'&'", "'('", "')'", + "'+'", "'-'", "','", "'['", "']'", "'@'", "'/'", "$accept", "operand", + "generic_operand", "motorola_operand", "mit_operand", "zireg", "zdireg", + "zadr", "zdr", "apc", "zapc", "optzapc", "zpc", "optczapc", "optcexpr", + "optexprc", "reglist", "ireglist", "reglistpair", "reglistreg", YY_NULLPTR }; #endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const short yyr1[] = +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_uint16 yytoknum[] = { - 0, 25, 25, 25, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 28, 28, 28, 28, 28, 28, 28, 28, 29, - 29, 30, 30, 31, 31, 31, 32, 32, 33, 33, - 34, 34, 34, 35, 35, 36, 36, 37, 37, 38, - 38, 39, 39, 40, 40, 40, 41, 41, 41, 41, - 42, 43, 43, 43, 43 + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 35, 38, 40, 41, 43, 45, + 44, 91, 93, 64, 47 +}; +# endif + +#define YYPACT_NINF -104 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-104))) + +#define YYTABLE_NINF -60 + +#define yytable_value_is_error(Yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + 89, 13, 8, 16, 35, -104, -104, -104, -104, 24, + 40, 44, 58, 47, 64, -104, -104, -104, -104, -104, + 53, -104, 60, -4, 121, -104, -104, -104, 72, 73, + 92, -104, 97, -104, 57, 14, 100, -104, 112, 132, + -104, 28, 151, 151, 151, -104, 117, 81, 124, -104, + -104, -104, 121, 126, 99, 71, 65, 130, 103, 134, + 135, -104, -104, -104, -104, -104, -104, -104, 128, 4, + -104, -104, 78, 148, -104, 131, -104, 117, 142, 78, + 136, 131, 146, 117, 150, -104, -104, -104, -104, -104, + -104, -104, 152, 153, -104, -104, 154, -104, 143, 141, + 151, 151, -104, 155, 156, 157, -104, 131, 158, 159, + 160, 161, 114, 163, 162, -104, -104, -104, -104, 145, + -104, 164, -104, -104, -104, -104, -104, 168, 169, 131, + 114, 170, 171, 171, -104, 171, -104, 171, 172, 166, + -104, -104, 173, 174, 171, -104, 177, 175, 176, 180, + 181, 186, 178, 171, 171, 183, -104, -104, -104, -104, + 144, 141, 188, 185, 187, -104, -104, 189, 190, -104, + -104, -104, -104 }; -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const short yyr2[] = + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = { - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 3, 4, 4, 5, 5, 4, 3, - 3, 3, 7, 7, 6, 5, 6, 5, 6, 5, - 5, 4, 9, 7, 8, 6, 10, 8, 10, 8, - 8, 2, 3, 3, 5, 6, 10, 9, 10, 1, + 64, 82, 83, 84, 85, 60, 63, 62, 9, 10, + 0, 0, 0, 0, 0, 2, 3, 4, 61, 65, + 0, 13, 74, 0, 0, 11, 12, 57, 59, 60, + 63, 58, 62, 52, 0, 72, 68, 53, 0, 0, + 1, 42, 0, 0, 0, 59, 68, 0, 14, 20, + 21, 22, 0, 68, 0, 0, 0, 0, 0, 0, + 72, 43, 44, 82, 83, 84, 85, 75, 78, 77, + 81, 76, 0, 0, 19, 0, 15, 68, 0, 73, + 0, 0, 70, 68, 0, 69, 32, 55, 66, 56, + 67, 50, 0, 0, 51, 54, 0, 16, 0, 0, + 0, 0, 31, 0, 0, 0, 17, 0, 69, 70, + 0, 0, 0, 0, 0, 26, 18, 28, 30, 45, + 73, 0, 79, 80, 27, 29, 25, 0, 0, 0, + 0, 0, 70, 70, 71, 70, 36, 70, 0, 46, + 23, 24, 0, 0, 70, 34, 0, 0, 0, 0, + 0, 72, 0, 70, 70, 0, 38, 40, 35, 41, + 0, 0, 0, 0, 0, 33, 48, 0, 0, 37, + 39, 47, 49 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -104, -104, -104, -104, -104, -74, -13, -104, -7, -104, + 2, -104, -71, -34, -103, -60, -104, -41, 203, 9 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 14, 15, 16, 17, 93, 36, 94, 95, 18, + 85, 20, 96, 57, 113, 55, 21, 67, 68, 69 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = +{ + 99, 103, 19, 71, 104, 37, 131, 110, -6, 23, + 111, 46, 73, -5, 38, 43, -7, 37, 45, 80, + 44, 5, 6, 43, 7, 121, 47, 53, 101, 147, + 148, -59, 149, 127, 150, -8, 128, 54, 135, 77, + 24, 155, 83, 105, 60, 37, 61, 62, 37, 114, + 163, 164, 70, 25, 78, 142, 144, 26, 143, 122, + 123, 27, 28, 39, 40, 29, 30, 31, 32, 45, + 33, 34, 5, 6, 27, 7, 41, 52, 84, 35, + 31, 108, 45, 33, 42, 5, 6, 167, 7, 48, + 49, 161, 1, 2, 3, 4, 5, 6, 74, 7, + 8, 75, 9, 10, 11, 12, 27, 87, 13, 50, + 88, 89, 31, 90, 51, 91, 92, 27, 87, 81, + 56, 82, 89, 31, 27, 45, 91, 134, 5, 6, + 31, 7, 58, 33, 27, 87, 59, 72, 88, 89, + 31, 90, 76, 91, 27, 87, 79, 86, 98, 89, + 31, 97, 100, 91, 63, 64, 65, 66, 109, 106, + 119, 166, 107, 120, 120, 102, 112, 115, 138, 116, + 117, 118, 124, 125, 126, 0, 0, 0, 129, 130, + 136, 139, 132, 133, 137, 140, 141, 145, 151, 152, + 134, 146, 156, 157, 162, 153, 154, 158, 159, 160, + 165, 168, 169, 22, 170, 0, 171, 172 +}; + +static const yytype_int16 yycheck[] = +{ + 60, 75, 0, 44, 75, 12, 109, 81, 0, 0, + 81, 24, 46, 0, 12, 19, 0, 24, 4, 53, + 24, 7, 8, 19, 10, 99, 24, 13, 24, 132, + 133, 23, 135, 107, 137, 0, 107, 35, 112, 52, + 16, 144, 55, 77, 16, 52, 18, 19, 55, 83, + 153, 154, 43, 13, 52, 129, 130, 13, 129, 100, + 101, 3, 4, 16, 0, 7, 8, 9, 10, 4, + 12, 13, 7, 8, 3, 10, 23, 20, 13, 21, + 9, 79, 4, 12, 24, 7, 8, 161, 10, 17, + 17, 151, 3, 4, 5, 6, 7, 8, 17, 10, + 11, 20, 13, 14, 15, 16, 3, 4, 19, 17, + 7, 8, 9, 10, 17, 12, 13, 3, 4, 20, + 20, 22, 8, 9, 3, 4, 12, 13, 7, 8, + 9, 10, 20, 12, 3, 4, 4, 20, 7, 8, + 9, 10, 18, 12, 3, 4, 20, 17, 13, 8, + 9, 17, 24, 12, 3, 4, 5, 6, 22, 17, + 17, 17, 20, 20, 20, 17, 20, 17, 23, 17, + 17, 17, 17, 17, 17, -1, -1, -1, 20, 20, + 17, 17, 22, 22, 22, 17, 17, 17, 16, 23, + 13, 20, 17, 17, 16, 22, 22, 17, 17, 13, + 17, 13, 17, 0, 17, -1, 17, 17 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 3, 4, 5, 6, 7, 8, 10, 11, 13, + 14, 15, 16, 19, 26, 27, 28, 29, 34, 35, + 36, 41, 43, 44, 16, 13, 13, 3, 4, 7, + 8, 9, 10, 12, 13, 21, 31, 33, 35, 16, + 0, 23, 24, 19, 24, 4, 31, 35, 17, 17, + 17, 17, 20, 13, 35, 40, 20, 38, 20, 4, + 16, 18, 19, 3, 4, 5, 6, 42, 43, 44, + 44, 42, 20, 38, 17, 20, 18, 31, 35, 20, + 38, 20, 22, 31, 13, 35, 17, 4, 7, 8, + 10, 12, 13, 30, 32, 33, 37, 17, 13, 40, + 24, 24, 17, 30, 37, 38, 17, 20, 35, 22, + 30, 37, 20, 39, 38, 17, 17, 17, 17, 17, + 20, 30, 42, 42, 17, 17, 17, 30, 37, 20, + 20, 39, 22, 22, 13, 30, 17, 22, 23, 17, + 17, 17, 30, 37, 30, 17, 20, 39, 39, 39, + 39, 16, 23, 22, 22, 39, 17, 17, 17, 17, + 13, 40, 16, 39, 39, 17, 17, 30, 13, 17, + 17, 17, 17 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 25, 26, 26, 26, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, + 30, 30, 31, 31, 32, 32, 32, 33, 33, 34, + 34, 35, 35, 35, 36, 36, 37, 37, 38, 38, + 39, 39, 40, 40, 41, 41, 41, 42, 42, 42, + 42, 43, 44, 44, 44, 44 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 1, 3, 4, 4, 5, 5, 4, + 3, 3, 3, 7, 7, 6, 5, 6, 5, 6, + 5, 5, 4, 9, 7, 8, 6, 10, 8, 10, + 8, 8, 2, 3, 3, 5, 6, 10, 9, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 0, 2, 0, - 2, 0, 2, 1, 3, 3, 1, 1, 3, 3, - 3, 1, 1, 1, 1 -}; - -/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE - doesn't specify something else to do. Zero means the default is an - error. */ -static const short yydefact[] = -{ - 63, 81, 82, 83, 84, 59, 62, 61, 8, 9, - 0, 0, 0, 0, 1, 2, 3, 60, 64, 0, - 12, 73, 0, 0, 10, 11, 56, 58, 59, 62, - 57, 61, 51, 0, 71, 67, 52, 0, 0, 41, - 0, 0, 0, 58, 67, 0, 13, 19, 20, 21, - 0, 67, 0, 0, 0, 0, 0, 0, 71, 42, - 43, 81, 82, 83, 84, 74, 77, 76, 80, 75, - 0, 0, 18, 0, 14, 67, 0, 72, 0, 0, - 69, 67, 0, 68, 31, 54, 65, 55, 66, 49, - 0, 0, 50, 53, 0, 15, 0, 0, 0, 0, - 30, 0, 0, 0, 16, 0, 68, 69, 0, 0, - 0, 0, 0, 25, 17, 27, 29, 44, 72, 0, - 78, 79, 26, 28, 24, 0, 0, 0, 0, 0, - 69, 69, 70, 69, 35, 69, 0, 45, 22, 23, - 0, 0, 69, 33, 0, 0, 0, 0, 0, 71, - 0, 69, 69, 0, 37, 39, 34, 40, 0, 0, - 0, 0, 0, 32, 47, 0, 0, 36, 38, 46, - 48, 0, 0, 0 -}; - -static const short yydefgoto[] = -{ - 171, 14, 15, 16, 91, 35, 92, 93, 17, 83, - 19, 94, 55, 111, 53, 20, 65, 66, 67 -}; - -static const short yypact[] = -{ - 89, 10, 11, 19, 23,-32768,-32768,-32768,-32768, 13, - -4, 22, 57, 36,-32768,-32768,-32768,-32768,-32768, 18, - -32768, 33, -2, 114,-32768,-32768,-32768, 46, 62, 66, - -32768, 67,-32768, 68, 131, 69,-32768, 70, 105, 147, - 156, 156, 156,-32768, 94, 25, 101,-32768,-32768,-32768, - 114, 100, 53, 9, 138, 108, 103, 112, 117,-32768, - -32768,-32768,-32768,-32768,-32768,-32768, 119, 12,-32768,-32768, - 64, 130,-32768, 124,-32768, 94, 81, 64, 135, 124, - 132, 94, 150,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 151, 152,-32768,-32768, 153,-32768, 120, 146, 156, 156, - -32768, 154, 155, 157,-32768, 124, 144, 158, 159, 160, - 73, 162, 161,-32768,-32768,-32768,-32768, 163,-32768, 167, - -32768,-32768,-32768,-32768,-32768, 168, 170, 124, 73, 171, - 169, 169,-32768, 169,-32768, 169, 164, 172,-32768,-32768, - 174, 175, 169,-32768, 177, 176, 181, 182, 183, 178, - 185, 169, 169, 186,-32768,-32768,-32768,-32768, 136, 146, - 179, 187, 188,-32768,-32768, 189, 190,-32768,-32768,-32768, - -32768, 173, 194,-32768 -}; - -static const short yypgoto[] = -{ - -32768,-32768,-32768,-32768, -72, 1,-32768, -7,-32768, 3, - -32768, -65, -31, -103, -58,-32768, -40, 202, 6 + 1, 1, 1, 1, 0, 1, 1, 1, 0, 2, + 0, 2, 0, 2, 1, 3, 3, 1, 1, 3, + 3, 3, 1, 1, 1, 1 }; -#define YYLAST 207 +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab -static const short yytable[] = -{ - 97, 101, 69, 18, 129, 36, 22, 108, 102, 24, - -4, -5, 26, 71, 109, 37, 36, 41, 30, -6, - 78, 32, 42, -7, 44, 119, 45, 145, 146, 23, - 147, 41, 148, 125, -58, 25, 99, 52, 133, 153, - 126, 39, 72, 36, 103, 73, 36, 68, 161, 162, - 112, 75, 38, 76, 81, 140, 142, 40, 120, 121, - 26, 27, 141, 46, 28, 29, 30, 31, 43, 32, - 33, 5, 6, 79, 7, 80, 26, 85, 34, 47, - 106, 87, 30, 48, 49, 89, 132, 165, 50, 54, - 56, 159, 1, 2, 3, 4, 5, 6, 104, 7, - 8, 105, 9, 10, 11, 12, 26, 85, 13, 57, - 86, 87, 30, 88, 70, 89, 90, 26, 43, 74, - 77, 5, 6, 30, 7, 84, 32, 26, 85, 95, - 96, 86, 87, 30, 88, 43, 89, 117, 5, 6, - 118, 7, 43, 98, 51, 5, 6, 100, 7, 26, - 85, 82, 110, 164, 87, 30, 118, 107, 89, 61, - 62, 63, 64, 58, 127, 59, 60, 113, 114, 115, - 116, 122, 123, 172, 124, 0, 0, 0, 128, 134, - 149, 130, 131, 135, 137, 138, 136, 139, 143, 144, - 132, 158, 166, 154, 173, 150, 151, 152, 155, 156, - 157, 160, 21, 163, 167, 168, 169, 170 -}; - -static const short yycheck[] = -{ - 58, 73, 42, 0, 107, 12, 0, 79, 73, 13, - 0, 0, 3, 44, 79, 12, 23, 19, 9, 0, - 51, 12, 24, 0, 23, 97, 23, 130, 131, 16, - 133, 19, 135, 105, 23, 13, 24, 34, 110, 142, - 105, 23, 17, 50, 75, 20, 53, 41, 151, 152, - 81, 50, 16, 50, 53, 127, 128, 24, 98, 99, - 3, 4, 127, 17, 7, 8, 9, 10, 4, 12, - 13, 7, 8, 20, 10, 22, 3, 4, 21, 17, - 77, 8, 9, 17, 17, 12, 13, 159, 20, 20, - 20, 149, 3, 4, 5, 6, 7, 8, 17, 10, - 11, 20, 13, 14, 15, 16, 3, 4, 19, 4, - 7, 8, 9, 10, 20, 12, 13, 3, 4, 18, - 20, 7, 8, 9, 10, 17, 12, 3, 4, 17, - 13, 7, 8, 9, 10, 4, 12, 17, 7, 8, - 20, 10, 4, 24, 13, 7, 8, 17, 10, 3, - 4, 13, 20, 17, 8, 9, 20, 22, 12, 3, - 4, 5, 6, 16, 20, 18, 19, 17, 17, 17, - 17, 17, 17, 0, 17, -1, -1, -1, 20, 17, - 16, 22, 22, 22, 17, 17, 23, 17, 17, 20, - 13, 13, 13, 17, 0, 23, 22, 22, 17, 17, - 17, 16, 0, 17, 17, 17, 17, 17 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/share/bison-1.35/bison.simple" - -/* Skeleton output parser for bison, - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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 - the Free Software Foundation; either version 2, 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. - - 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser when - the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# else -# ifndef YYSTACK_USE_ALLOCA -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# endif -#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short yyss; - YYSTYPE yyvs; -# if YYLSP_NEEDED - YYLTYPE yyls; -# endif -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# if YYLSP_NEEDED -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAX) -# else -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAX) -# endif - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up"); \ - YYERROR; \ - } \ + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ while (0) -#define YYTERROR 1 -#define YYERRCODE 256 +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). - - When YYLLOC_DEFAULT is run, CURRENT is set the location of the - first token. By default, to implement support for ranges, extend - its range to the last symbol. */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - Current.last_line = Rhs[N].last_line; \ - Current.last_column = Rhs[N].last_column; -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#if YYPURE -# if YYLSP_NEEDED -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval, &yylloc) -# endif -# else /* !YYLSP_NEEDED */ -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval) -# endif -# endif /* !YYLSP_NEEDED */ -#else /* !YYPURE */ -# define YYLEX yylex () -#endif /* !YYPURE */ - /* Enable debugging if requested. */ #if YYDEBUG @@ -596,20 +772,130 @@ while (0) # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ } while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +{ + FILE *yyo = yyoutput; + YYUSE (yyo); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + YYUSE (yytype); +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +{ + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +{ + unsigned long int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) + /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ + /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -617,59 +903,43 @@ int yydebug; if the built-in stack extension method is used). Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ -#if YYMAXDEPTH == 0 -# undef YYMAXDEPTH -#endif - #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif - -#ifdef YYERROR_VERBOSE + + +#if YYERROR_VERBOSE # ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) +# if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif { - register const char *yys = yystr; - - while (*yys++ != '\0') + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) continue; - - return yys - yystr - 1; + return yylen; } # endif # endif # 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 YYDEST. */ static char * -# if defined (__STDC__) || defined (__cplusplus) yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif { - register char *yyd = yydest; - register const char *yys = yysrc; + char *yyd = yydest; + const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; @@ -678,149 +948,281 @@ yystpcpy (yydest, yysrc) } # endif # endif -#endif - -#line 315 "/usr/share/bison-1.35/bison.simple" +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -# define YYPARSE_PARAM_DECL -# else -# define YYPARSE_PARAM_ARG YYPARSE_PARAM -# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} # endif -#else /* !YYPARSE_PARAM */ -# define YYPARSE_PARAM_ARG -# define YYPARSE_PARAM_DECL -#endif /* !YYPARSE_PARAM */ -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -# ifdef YYPARSE_PARAM -int yyparse (void *); -# else -int yyparse (void); -# endif -#endif +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. -/* YY_DECL_VARIABLES -- depending whether we use a pure parser, - variables are global, or local to YYPARSE. */ + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; -#define YY_DECL_NON_LSP_VARIABLES \ -/* The lookahead symbol. */ \ -int yychar; \ - \ -/* The semantic value of the lookahead symbol. */ \ -YYSTYPE yylval; \ - \ -/* Number of parse errors so far. */ \ + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +{ + YYUSE (yyvaluep); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + +/* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; +/* Number of syntax errors so far. */ int yynerrs; -#if YYLSP_NEEDED -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES \ - \ -/* Location data for the lookahead symbol. */ \ -YYLTYPE yylloc; -#else -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES -#endif - -/* If nonreentrant, generate the variables here. */ - -#if !YYPURE -YY_DECL_VARIABLES -#endif /* !YYPURE */ +/*----------. +| yyparse. | +`----------*/ int -yyparse (YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL +yyparse (void) { - /* If reentrant, generate the variables here. */ -#if YYPURE - YY_DECL_VARIABLES -#endif /* !YYPURE */ + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; - register int yystate; - register int yyn; + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ - int yychar1 = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; - register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - register YYSTYPE *yyvsp; - -#if YYLSP_NEEDED - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; -#endif - -#if YYLSP_NEEDED -# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -# define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - YYSIZE_T yystacksize = YYINITDEPTH; - - + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; -#if YYLSP_NEEDED - YYLTYPE yyloc; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; -#if YYLSP_NEEDED - yylsp = yyls; -#endif + yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. @@ -828,195 +1230,143 @@ yyparse (YYPARSE_PARAM_ARG) `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ + have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; - if (yyssp >= yyss + yystacksize - 1) + if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. */ -# if YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), - &yystacksize); - yyls = yyls1; -# else - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); -# endif - yyss = yyss1; - yyvs = yyvs1; + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE - goto yyoverflowlab; + goto yyexhaustedlab; # else /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - goto yyoverflowlab; + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); -# if YYLSP_NEEDED - YYSTACK_RELOCATE (yyls); -# endif -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; -#if YYLSP_NEEDED - yylsp = yyls + yysize - 1; -#endif YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); - if (yyssp >= yyss + yystacksize - 1) - YYABORT; + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - goto yybackup; + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yyn == YYFLAG) + if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; + yychar = yylex (); } - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ + if (yychar <= YYEOF) { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - + yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { - yychar1 = YYTRANSLATE (yychar); - -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables - which are defined only if `YYDEBUG' is set. */ - if (yydebug) - { - YYFPRINTF (stderr, "Next token is %d (%s", - yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise - meaning of a token, for further debugging info. */ -# ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -# endif - YYFPRINTF (stderr, ")\n"); - } -#endif + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) + if (yyn <= 0) { - if (yyn == YYFLAG) - goto yyerrlab; + if (yytable_value_is_error (yyn)) + goto yyerrlab; yyn = -yyn; goto yyreduce; } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %d (%s), ", - yychar, yytname[yychar1])); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + goto yynewstate; @@ -1038,779 +1388,857 @@ yyreduce: yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + '$$ = $1'. - Otherwise, the following line sets YYVAL to the semantic value of - the lookahead token. This behavior is undocumented and Bison + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; -#if YYLSP_NEEDED - /* Similarly for the default location. Let the user run additional - commands if for instance locations are ranges. */ - yyloc = yylsp[1-yylen]; - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); -#endif -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables which - are defined only if `YYDEBUG' is set. */ - if (yydebug) + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 5: +#line 127 "m68k-parse.y" /* yacc.c:1646 */ { - int yyi; - - YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - switch (yyn) { - -case 4: -#line 127 "m68k-parse.y" -{ op->mode = DREG; - op->reg = yyvsp[0].reg; + op->reg = (yyvsp[0].reg); } +#line 1411 "y.tab.c" /* yacc.c:1646 */ break; -case 5: -#line 132 "m68k-parse.y" -{ - op->mode = AREG; - op->reg = yyvsp[0].reg; - } - break; -case 6: -#line 137 "m68k-parse.y" -{ - op->mode = FPREG; - op->reg = yyvsp[0].reg; - } - break; -case 7: -#line 142 "m68k-parse.y" -{ - op->mode = CONTROL; - op->reg = yyvsp[0].reg; - } - break; -case 8: -#line 147 "m68k-parse.y" -{ - op->mode = CONTROL; - op->reg = yyvsp[0].reg; - } - break; -case 9: -#line 152 "m68k-parse.y" -{ - op->mode = ABSL; - op->disp = yyvsp[0].exp; - } - break; -case 10: -#line 157 "m68k-parse.y" -{ - op->mode = IMMED; - op->disp = yyvsp[0].exp; - } - break; -case 11: -#line 162 "m68k-parse.y" -{ - op->mode = IMMED; - op->disp = yyvsp[0].exp; - } - break; -case 12: -#line 167 "m68k-parse.y" -{ - op->mode = REGLST; - op->mask = yyvsp[0].mask; - } - break; -case 13: -#line 180 "m68k-parse.y" -{ - op->mode = AINDR; - op->reg = yyvsp[-1].reg; - } - break; -case 14: -#line 185 "m68k-parse.y" -{ - op->mode = AINC; - op->reg = yyvsp[-2].reg; - } - break; -case 15: -#line 190 "m68k-parse.y" -{ - op->mode = ADEC; - op->reg = yyvsp[-1].reg; - } - break; -case 16: -#line 195 "m68k-parse.y" -{ - op->reg = yyvsp[-1].reg; - op->disp = yyvsp[-3].exp; - if ((yyvsp[-1].reg >= ZADDR0 && yyvsp[-1].reg <= ZADDR7) - || yyvsp[-1].reg == ZPC) - op->mode = BASE; - else - op->mode = DISP; - } - break; -case 17: -#line 205 "m68k-parse.y" -{ - op->reg = yyvsp[-3].reg; - op->disp = yyvsp[-1].exp; - if ((yyvsp[-3].reg >= ZADDR0 && yyvsp[-3].reg <= ZADDR7) - || yyvsp[-3].reg == ZPC) - op->mode = BASE; - else - op->mode = DISP; - } - break; -case 18: -#line 215 "m68k-parse.y" -{ - op->reg = yyvsp[-1].reg; - op->disp = yyvsp[-3].exp; - if ((yyvsp[-1].reg >= ZADDR0 && yyvsp[-1].reg <= ZADDR7) - || yyvsp[-1].reg == ZPC) - op->mode = BASE; - else - op->mode = DISP; - } - break; -case 19: -#line 225 "m68k-parse.y" -{ - op->mode = DISP; - op->reg = yyvsp[-1].reg; - } - break; -case 20: -#line 230 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-1].reg; - } - break; -case 21: -#line 235 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-1].reg; - } - break; -case 22: -#line 240 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-3].reg; - op->disp = yyvsp[-5].exp; - op->index = yyvsp[-1].indexreg; - } - break; -case 23: -#line 247 "m68k-parse.y" -{ - if (yyvsp[-3].reg == PC || yyvsp[-3].reg == ZPC) - yyerror (_("syntax error")); - op->mode = BASE; - op->reg = yyvsp[-1].reg; - op->disp = yyvsp[-5].exp; - op->index.reg = yyvsp[-3].reg; - op->index.size = SIZE_UNSPEC; - op->index.scale = 1; - } - break; -case 24: -#line 258 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-1].reg; - op->disp = yyvsp[-4].exp; - op->index = yyvsp[-2].indexreg; - } - break; -case 25: -#line 265 "m68k-parse.y" -{ - op->mode = BASE; - op->disp = yyvsp[-1].exp; - op->index = yyvsp[-3].indexreg; - } - break; -case 26: -#line 271 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-3].reg; - op->disp = yyvsp[-5].exp; - op->index = yyvsp[-1].indexreg; - } - break; -case 27: -#line 278 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-3].reg; - op->index = yyvsp[-1].indexreg; - } - break; -case 28: -#line 284 "m68k-parse.y" -{ - if (yyvsp[-3].reg == PC || yyvsp[-3].reg == ZPC) - yyerror (_("syntax error")); - op->mode = BASE; - op->reg = yyvsp[-1].reg; - op->disp = yyvsp[-5].exp; - op->index.reg = yyvsp[-3].reg; - op->index.size = SIZE_UNSPEC; - op->index.scale = 1; - } - break; -case 29: -#line 295 "m68k-parse.y" -{ - if (yyvsp[-3].reg == PC || yyvsp[-3].reg == ZPC) - yyerror (_("syntax error")); - op->mode = BASE; - op->reg = yyvsp[-1].reg; - op->index.reg = yyvsp[-3].reg; - op->index.size = SIZE_UNSPEC; - op->index.scale = 1; - } - break; -case 30: -#line 305 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-1].reg; - op->disp = yyvsp[-4].exp; - op->index = yyvsp[-2].indexreg; - } - break; -case 31: -#line 312 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-1].reg; - op->index = yyvsp[-2].indexreg; - } - break; -case 32: -#line 318 "m68k-parse.y" -{ - op->mode = POST; - op->reg = yyvsp[-5].reg; - op->disp = yyvsp[-6].exp; - op->index = yyvsp[-2].indexreg; - op->odisp = yyvsp[-1].exp; - } - break; -case 33: -#line 326 "m68k-parse.y" -{ - op->mode = POST; - op->reg = yyvsp[-3].reg; - op->disp = yyvsp[-4].exp; - op->odisp = yyvsp[-1].exp; - } - break; -case 34: -#line 333 "m68k-parse.y" -{ - op->mode = POST; - op->reg = yyvsp[-5].reg; - op->index = yyvsp[-2].indexreg; - op->odisp = yyvsp[-1].exp; - } - break; -case 35: -#line 340 "m68k-parse.y" -{ - op->mode = POST; - op->reg = yyvsp[-3].reg; - op->odisp = yyvsp[-1].exp; - } - break; -case 36: -#line 346 "m68k-parse.y" -{ - op->mode = PRE; - op->reg = yyvsp[-5].reg; - op->disp = yyvsp[-7].exp; - op->index = yyvsp[-3].indexreg; - op->odisp = yyvsp[-1].exp; - } - break; -case 37: -#line 354 "m68k-parse.y" -{ - op->mode = PRE; - op->reg = yyvsp[-5].reg; - op->index = yyvsp[-3].indexreg; - op->odisp = yyvsp[-1].exp; - } - break; -case 38: -#line 361 "m68k-parse.y" -{ - if (yyvsp[-5].reg == PC || yyvsp[-5].reg == ZPC) - yyerror (_("syntax error")); - op->mode = PRE; - op->reg = yyvsp[-3].reg; - op->disp = yyvsp[-7].exp; - op->index.reg = yyvsp[-5].reg; - op->index.size = SIZE_UNSPEC; - op->index.scale = 1; - op->odisp = yyvsp[-1].exp; - } - break; -case 39: -#line 373 "m68k-parse.y" -{ - if (yyvsp[-5].reg == PC || yyvsp[-5].reg == ZPC) - yyerror (_("syntax error")); - op->mode = PRE; - op->reg = yyvsp[-3].reg; - op->index.reg = yyvsp[-5].reg; - op->index.size = SIZE_UNSPEC; - op->index.scale = 1; - op->odisp = yyvsp[-1].exp; - } - break; -case 40: -#line 384 "m68k-parse.y" -{ - op->mode = PRE; - op->reg = yyvsp[-3].reg; - op->disp = yyvsp[-5].exp; - op->index = yyvsp[-4].indexreg; - op->odisp = yyvsp[-1].exp; - } - break; -case 41: -#line 397 "m68k-parse.y" -{ - /* We use optzapc to avoid a shift/reduce conflict. */ - if (yyvsp[-1].reg < ADDR0 || yyvsp[-1].reg > ADDR7) - yyerror (_("syntax error")); - op->mode = AINDR; - op->reg = yyvsp[-1].reg; - } - break; -case 42: -#line 405 "m68k-parse.y" -{ - /* We use optzapc to avoid a shift/reduce conflict. */ - if (yyvsp[-2].reg < ADDR0 || yyvsp[-2].reg > ADDR7) - yyerror (_("syntax error")); - op->mode = AINC; - op->reg = yyvsp[-2].reg; - } - break; -case 43: -#line 413 "m68k-parse.y" -{ - /* We use optzapc to avoid a shift/reduce conflict. */ - if (yyvsp[-2].reg < ADDR0 || yyvsp[-2].reg > ADDR7) - yyerror (_("syntax error")); - op->mode = ADEC; - op->reg = yyvsp[-2].reg; - } - break; -case 44: -#line 421 "m68k-parse.y" -{ - op->reg = yyvsp[-4].reg; - op->disp = yyvsp[-1].exp; - if ((yyvsp[-4].reg >= ZADDR0 && yyvsp[-4].reg <= ZADDR7) - || yyvsp[-4].reg == ZPC) - op->mode = BASE; - else - op->mode = DISP; - } - break; -case 45: -#line 431 "m68k-parse.y" -{ - op->mode = BASE; - op->reg = yyvsp[-5].reg; - op->disp = yyvsp[-2].exp; - op->index = yyvsp[-1].indexreg; - } - break; -case 46: -#line 438 "m68k-parse.y" -{ - op->mode = POST; - op->reg = yyvsp[-9].reg; - op->disp = yyvsp[-6].exp; - op->index = yyvsp[-1].indexreg; - op->odisp = yyvsp[-2].exp; - } - break; -case 47: -#line 446 "m68k-parse.y" -{ - op->mode = POST; - op->reg = yyvsp[-8].reg; - op->disp = yyvsp[-5].exp; - op->odisp = yyvsp[-1].exp; - } - break; -case 48: -#line 453 "m68k-parse.y" -{ - op->mode = PRE; - op->reg = yyvsp[-9].reg; - op->disp = yyvsp[-6].exp; - op->index = yyvsp[-5].indexreg; - op->odisp = yyvsp[-1].exp; - } - break; -case 50: -#line 468 "m68k-parse.y" -{ - yyval.indexreg.reg = yyvsp[0].reg; - yyval.indexreg.size = SIZE_UNSPEC; - yyval.indexreg.scale = 1; - } - break; -case 52: -#line 482 "m68k-parse.y" -{ - yyval.indexreg.reg = yyvsp[0].reg; - yyval.indexreg.size = SIZE_UNSPEC; - yyval.indexreg.scale = 1; - } - break; -case 63: -#line 525 "m68k-parse.y" -{ - yyval.reg = ZADDR0; - } - break; -case 67: -#line 542 "m68k-parse.y" -{ - yyval.reg = ZADDR0; - } - break; -case 68: -#line 546 "m68k-parse.y" -{ - yyval.reg = yyvsp[0].reg; - } - break; -case 69: -#line 555 "m68k-parse.y" -{ - yyval.exp.exp.X_op = O_absent; - yyval.exp.size = SIZE_UNSPEC; - } - break; -case 70: -#line 560 "m68k-parse.y" -{ - yyval.exp = yyvsp[0].exp; - } - break; -case 71: -#line 569 "m68k-parse.y" -{ - yyval.exp.exp.X_op = O_absent; - yyval.exp.size = SIZE_UNSPEC; - } - break; -case 72: -#line 574 "m68k-parse.y" -{ - yyval.exp = yyvsp[-1].exp; - } - break; -case 74: -#line 584 "m68k-parse.y" -{ - yyval.mask = yyvsp[-2].mask | yyvsp[0].mask; - } - break; -case 75: -#line 588 "m68k-parse.y" -{ - yyval.mask = (1 << yyvsp[-2].onereg) | yyvsp[0].mask; - } - break; -case 76: -#line 600 "m68k-parse.y" -{ - yyval.mask = 1 << yyvsp[0].onereg; - } - break; -case 78: -#line 605 "m68k-parse.y" -{ - yyval.mask = yyvsp[-2].mask | yyvsp[0].mask; - } - break; -case 79: -#line 609 "m68k-parse.y" -{ - yyval.mask = (1 << yyvsp[-2].onereg) | yyvsp[0].mask; - } - break; -case 80: -#line 616 "m68k-parse.y" -{ - if (yyvsp[-2].onereg <= yyvsp[0].onereg) - yyval.mask = (1 << (yyvsp[0].onereg + 1)) - 1 - ((1 << yyvsp[-2].onereg) - 1); - else - yyval.mask = (1 << (yyvsp[-2].onereg + 1)) - 1 - ((1 << yyvsp[0].onereg) - 1); - } - break; -case 81: -#line 626 "m68k-parse.y" -{ - yyval.onereg = yyvsp[0].reg - DATA0; - } - break; -case 82: -#line 630 "m68k-parse.y" -{ - yyval.onereg = yyvsp[0].reg - ADDR0 + 8; - } - break; -case 83: -#line 634 "m68k-parse.y" -{ - yyval.onereg = yyvsp[0].reg - FP0 + 16; - } - break; -case 84: -#line 638 "m68k-parse.y" -{ - if (yyvsp[0].reg == FPI) - yyval.onereg = 24; - else if (yyvsp[0].reg == FPS) - yyval.onereg = 25; - else - yyval.onereg = 26; - } - break; -} -#line 705 "/usr/share/bison-1.35/bison.simple" - - - yyvsp -= yylen; - yyssp -= yylen; -#if YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG - if (yydebug) + case 6: +#line 132 "m68k-parse.y" /* yacc.c:1646 */ { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); + op->mode = AREG; + op->reg = (yyvsp[0].reg); + } +#line 1420 "y.tab.c" /* yacc.c:1646 */ + break; + + case 7: +#line 137 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = FPREG; + op->reg = (yyvsp[0].reg); + } +#line 1429 "y.tab.c" /* yacc.c:1646 */ + break; + + case 8: +#line 142 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = CONTROL; + op->reg = (yyvsp[0].reg); + } +#line 1438 "y.tab.c" /* yacc.c:1646 */ + break; + + case 9: +#line 147 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = CONTROL; + op->reg = (yyvsp[0].reg); + } +#line 1447 "y.tab.c" /* yacc.c:1646 */ + break; + + case 10: +#line 152 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = ABSL; + op->disp = (yyvsp[0].exp); + } +#line 1456 "y.tab.c" /* yacc.c:1646 */ + break; + + case 11: +#line 157 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = IMMED; + op->disp = (yyvsp[0].exp); + } +#line 1465 "y.tab.c" /* yacc.c:1646 */ + break; + + case 12: +#line 162 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = IMMED; + op->disp = (yyvsp[0].exp); + } +#line 1474 "y.tab.c" /* yacc.c:1646 */ + break; + + case 13: +#line 167 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = REGLST; + op->mask = (yyvsp[0].mask); + } +#line 1483 "y.tab.c" /* yacc.c:1646 */ + break; + + case 14: +#line 180 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = AINDR; + op->reg = (yyvsp[-1].reg); + } +#line 1492 "y.tab.c" /* yacc.c:1646 */ + break; + + case 15: +#line 185 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = AINC; + op->reg = (yyvsp[-2].reg); + } +#line 1501 "y.tab.c" /* yacc.c:1646 */ + break; + + case 16: +#line 190 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = ADEC; + op->reg = (yyvsp[-1].reg); + } +#line 1510 "y.tab.c" /* yacc.c:1646 */ + break; + + case 17: +#line 195 "m68k-parse.y" /* yacc.c:1646 */ + { + op->reg = (yyvsp[-1].reg); + op->disp = (yyvsp[-3].exp); + if (((yyvsp[-1].reg) >= ZADDR0 && (yyvsp[-1].reg) <= ZADDR7) + || (yyvsp[-1].reg) == ZPC) + op->mode = BASE; + else + op->mode = DISP; + } +#line 1524 "y.tab.c" /* yacc.c:1646 */ + break; + + case 18: +#line 205 "m68k-parse.y" /* yacc.c:1646 */ + { + op->reg = (yyvsp[-3].reg); + op->disp = (yyvsp[-1].exp); + if (((yyvsp[-3].reg) >= ZADDR0 && (yyvsp[-3].reg) <= ZADDR7) + || (yyvsp[-3].reg) == ZPC) + op->mode = BASE; + else + op->mode = DISP; + } +#line 1538 "y.tab.c" /* yacc.c:1646 */ + break; + + case 19: +#line 215 "m68k-parse.y" /* yacc.c:1646 */ + { + op->reg = (yyvsp[-1].reg); + op->disp = (yyvsp[-3].exp); + if (((yyvsp[-1].reg) >= ZADDR0 && (yyvsp[-1].reg) <= ZADDR7) + || (yyvsp[-1].reg) == ZPC) + op->mode = BASE; + else + op->mode = DISP; + } +#line 1552 "y.tab.c" /* yacc.c:1646 */ + break; + + case 20: +#line 225 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = DISP; + op->reg = (yyvsp[-1].reg); + } +#line 1561 "y.tab.c" /* yacc.c:1646 */ + break; + + case 21: +#line 230 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + } +#line 1570 "y.tab.c" /* yacc.c:1646 */ + break; + + case 22: +#line 235 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + } +#line 1579 "y.tab.c" /* yacc.c:1646 */ + break; + + case 23: +#line 240 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-3].reg); + op->disp = (yyvsp[-5].exp); + op->index = (yyvsp[-1].indexreg); + } +#line 1590 "y.tab.c" /* yacc.c:1646 */ + break; + + case 24: +#line 247 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC) + yyerror (_("syntax error")); + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + op->disp = (yyvsp[-5].exp); + op->index.reg = (yyvsp[-3].reg); + op->index.size = SIZE_UNSPEC; + op->index.scale = 1; + } +#line 1605 "y.tab.c" /* yacc.c:1646 */ + break; + + case 25: +#line 258 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + op->disp = (yyvsp[-4].exp); + op->index = (yyvsp[-2].indexreg); + } +#line 1616 "y.tab.c" /* yacc.c:1646 */ + break; + + case 26: +#line 265 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->disp = (yyvsp[-1].exp); + op->index = (yyvsp[-3].indexreg); + } +#line 1626 "y.tab.c" /* yacc.c:1646 */ + break; + + case 27: +#line 271 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-3].reg); + op->disp = (yyvsp[-5].exp); + op->index = (yyvsp[-1].indexreg); + } +#line 1637 "y.tab.c" /* yacc.c:1646 */ + break; + + case 28: +#line 278 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-3].reg); + op->index = (yyvsp[-1].indexreg); + } +#line 1647 "y.tab.c" /* yacc.c:1646 */ + break; + + case 29: +#line 284 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC) + yyerror (_("syntax error")); + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + op->disp = (yyvsp[-5].exp); + op->index.reg = (yyvsp[-3].reg); + op->index.size = SIZE_UNSPEC; + op->index.scale = 1; + } +#line 1662 "y.tab.c" /* yacc.c:1646 */ + break; + + case 30: +#line 295 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[-3].reg) == PC || (yyvsp[-3].reg) == ZPC) + yyerror (_("syntax error")); + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + op->index.reg = (yyvsp[-3].reg); + op->index.size = SIZE_UNSPEC; + op->index.scale = 1; + } +#line 1676 "y.tab.c" /* yacc.c:1646 */ + break; + + case 31: +#line 305 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + op->disp = (yyvsp[-4].exp); + op->index = (yyvsp[-2].indexreg); + } +#line 1687 "y.tab.c" /* yacc.c:1646 */ + break; + + case 32: +#line 312 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-1].reg); + op->index = (yyvsp[-2].indexreg); + } +#line 1697 "y.tab.c" /* yacc.c:1646 */ + break; + + case 33: +#line 318 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = POST; + op->reg = (yyvsp[-5].reg); + op->disp = (yyvsp[-6].exp); + op->index = (yyvsp[-2].indexreg); + op->odisp = (yyvsp[-1].exp); + } +#line 1709 "y.tab.c" /* yacc.c:1646 */ + break; + + case 34: +#line 326 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = POST; + op->reg = (yyvsp[-3].reg); + op->disp = (yyvsp[-4].exp); + op->odisp = (yyvsp[-1].exp); + } +#line 1720 "y.tab.c" /* yacc.c:1646 */ + break; + + case 35: +#line 333 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = POST; + op->reg = (yyvsp[-5].reg); + op->index = (yyvsp[-2].indexreg); + op->odisp = (yyvsp[-1].exp); + } +#line 1731 "y.tab.c" /* yacc.c:1646 */ + break; + + case 36: +#line 340 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = POST; + op->reg = (yyvsp[-3].reg); + op->odisp = (yyvsp[-1].exp); + } +#line 1741 "y.tab.c" /* yacc.c:1646 */ + break; + + case 37: +#line 346 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = PRE; + op->reg = (yyvsp[-5].reg); + op->disp = (yyvsp[-7].exp); + op->index = (yyvsp[-3].indexreg); + op->odisp = (yyvsp[-1].exp); + } +#line 1753 "y.tab.c" /* yacc.c:1646 */ + break; + + case 38: +#line 354 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = PRE; + op->reg = (yyvsp[-5].reg); + op->index = (yyvsp[-3].indexreg); + op->odisp = (yyvsp[-1].exp); + } +#line 1764 "y.tab.c" /* yacc.c:1646 */ + break; + + case 39: +#line 361 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[-5].reg) == PC || (yyvsp[-5].reg) == ZPC) + yyerror (_("syntax error")); + op->mode = PRE; + op->reg = (yyvsp[-3].reg); + op->disp = (yyvsp[-7].exp); + op->index.reg = (yyvsp[-5].reg); + op->index.size = SIZE_UNSPEC; + op->index.scale = 1; + op->odisp = (yyvsp[-1].exp); + } +#line 1780 "y.tab.c" /* yacc.c:1646 */ + break; + + case 40: +#line 373 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[-5].reg) == PC || (yyvsp[-5].reg) == ZPC) + yyerror (_("syntax error")); + op->mode = PRE; + op->reg = (yyvsp[-3].reg); + op->index.reg = (yyvsp[-5].reg); + op->index.size = SIZE_UNSPEC; + op->index.scale = 1; + op->odisp = (yyvsp[-1].exp); + } +#line 1795 "y.tab.c" /* yacc.c:1646 */ + break; + + case 41: +#line 384 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = PRE; + op->reg = (yyvsp[-3].reg); + op->disp = (yyvsp[-5].exp); + op->index = (yyvsp[-4].indexreg); + op->odisp = (yyvsp[-1].exp); + } +#line 1807 "y.tab.c" /* yacc.c:1646 */ + break; + + case 42: +#line 397 "m68k-parse.y" /* yacc.c:1646 */ + { + /* We use optzapc to avoid a shift/reduce conflict. */ + if ((yyvsp[-1].reg) < ADDR0 || (yyvsp[-1].reg) > ADDR7) + yyerror (_("syntax error")); + op->mode = AINDR; + op->reg = (yyvsp[-1].reg); + } +#line 1819 "y.tab.c" /* yacc.c:1646 */ + break; + + case 43: +#line 405 "m68k-parse.y" /* yacc.c:1646 */ + { + /* We use optzapc to avoid a shift/reduce conflict. */ + if ((yyvsp[-2].reg) < ADDR0 || (yyvsp[-2].reg) > ADDR7) + yyerror (_("syntax error")); + op->mode = AINC; + op->reg = (yyvsp[-2].reg); + } +#line 1831 "y.tab.c" /* yacc.c:1646 */ + break; + + case 44: +#line 413 "m68k-parse.y" /* yacc.c:1646 */ + { + /* We use optzapc to avoid a shift/reduce conflict. */ + if ((yyvsp[-2].reg) < ADDR0 || (yyvsp[-2].reg) > ADDR7) + yyerror (_("syntax error")); + op->mode = ADEC; + op->reg = (yyvsp[-2].reg); + } +#line 1843 "y.tab.c" /* yacc.c:1646 */ + break; + + case 45: +#line 421 "m68k-parse.y" /* yacc.c:1646 */ + { + op->reg = (yyvsp[-4].reg); + op->disp = (yyvsp[-1].exp); + if (((yyvsp[-4].reg) >= ZADDR0 && (yyvsp[-4].reg) <= ZADDR7) + || (yyvsp[-4].reg) == ZPC) + op->mode = BASE; + else + op->mode = DISP; + } +#line 1857 "y.tab.c" /* yacc.c:1646 */ + break; + + case 46: +#line 431 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = BASE; + op->reg = (yyvsp[-5].reg); + op->disp = (yyvsp[-2].exp); + op->index = (yyvsp[-1].indexreg); + } +#line 1868 "y.tab.c" /* yacc.c:1646 */ + break; + + case 47: +#line 438 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = POST; + op->reg = (yyvsp[-9].reg); + op->disp = (yyvsp[-6].exp); + op->index = (yyvsp[-1].indexreg); + op->odisp = (yyvsp[-2].exp); + } +#line 1880 "y.tab.c" /* yacc.c:1646 */ + break; + + case 48: +#line 446 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = POST; + op->reg = (yyvsp[-8].reg); + op->disp = (yyvsp[-5].exp); + op->odisp = (yyvsp[-1].exp); + } +#line 1891 "y.tab.c" /* yacc.c:1646 */ + break; + + case 49: +#line 453 "m68k-parse.y" /* yacc.c:1646 */ + { + op->mode = PRE; + op->reg = (yyvsp[-9].reg); + op->disp = (yyvsp[-6].exp); + op->index = (yyvsp[-5].indexreg); + op->odisp = (yyvsp[-1].exp); + } +#line 1903 "y.tab.c" /* yacc.c:1646 */ + break; + + case 51: +#line 468 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.indexreg).reg = (yyvsp[0].reg); + (yyval.indexreg).size = SIZE_UNSPEC; + (yyval.indexreg).scale = 1; + } +#line 1913 "y.tab.c" /* yacc.c:1646 */ + break; + + case 53: +#line 482 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.indexreg).reg = (yyvsp[0].reg); + (yyval.indexreg).size = SIZE_UNSPEC; + (yyval.indexreg).scale = 1; + } +#line 1923 "y.tab.c" /* yacc.c:1646 */ + break; + + case 64: +#line 525 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.reg) = ZADDR0; + } +#line 1931 "y.tab.c" /* yacc.c:1646 */ + break; + + case 68: +#line 542 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.reg) = ZADDR0; + } +#line 1939 "y.tab.c" /* yacc.c:1646 */ + break; + + case 69: +#line 546 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.reg) = (yyvsp[0].reg); + } +#line 1947 "y.tab.c" /* yacc.c:1646 */ + break; + + case 70: +#line 555 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.exp).exp.X_op = O_absent; + (yyval.exp).size = SIZE_UNSPEC; + } +#line 1956 "y.tab.c" /* yacc.c:1646 */ + break; + + case 71: +#line 560 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.exp) = (yyvsp[0].exp); + } +#line 1964 "y.tab.c" /* yacc.c:1646 */ + break; + + case 72: +#line 569 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.exp).exp.X_op = O_absent; + (yyval.exp).size = SIZE_UNSPEC; + } +#line 1973 "y.tab.c" /* yacc.c:1646 */ + break; + + case 73: +#line 574 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.exp) = (yyvsp[-1].exp); + } +#line 1981 "y.tab.c" /* yacc.c:1646 */ + break; + + case 75: +#line 584 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.mask) = (yyvsp[-2].mask) | (yyvsp[0].mask); + } +#line 1989 "y.tab.c" /* yacc.c:1646 */ + break; + + case 76: +#line 588 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.mask) = (1 << (yyvsp[-2].onereg)) | (yyvsp[0].mask); + } +#line 1997 "y.tab.c" /* yacc.c:1646 */ + break; + + case 77: +#line 600 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.mask) = 1 << (yyvsp[0].onereg); + } +#line 2005 "y.tab.c" /* yacc.c:1646 */ + break; + + case 79: +#line 605 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.mask) = (yyvsp[-2].mask) | (yyvsp[0].mask); + } +#line 2013 "y.tab.c" /* yacc.c:1646 */ + break; + + case 80: +#line 609 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.mask) = (1 << (yyvsp[-2].onereg)) | (yyvsp[0].mask); + } +#line 2021 "y.tab.c" /* yacc.c:1646 */ + break; + + case 81: +#line 616 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[-2].onereg) <= (yyvsp[0].onereg)) + (yyval.mask) = (1 << ((yyvsp[0].onereg) + 1)) - 1 - ((1 << (yyvsp[-2].onereg)) - 1); + else + (yyval.mask) = (1 << ((yyvsp[-2].onereg) + 1)) - 1 - ((1 << (yyvsp[0].onereg)) - 1); + } +#line 2032 "y.tab.c" /* yacc.c:1646 */ + break; + + case 82: +#line 626 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.onereg) = (yyvsp[0].reg) - DATA0; + } +#line 2040 "y.tab.c" /* yacc.c:1646 */ + break; + + case 83: +#line 630 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.onereg) = (yyvsp[0].reg) - ADDR0 + 8; + } +#line 2048 "y.tab.c" /* yacc.c:1646 */ + break; + + case 84: +#line 634 "m68k-parse.y" /* yacc.c:1646 */ + { + (yyval.onereg) = (yyvsp[0].reg) - FP0 + 16; + } +#line 2056 "y.tab.c" /* yacc.c:1646 */ + break; + + case 85: +#line 638 "m68k-parse.y" /* yacc.c:1646 */ + { + if ((yyvsp[0].reg) == FPI) + (yyval.onereg) = 24; + else if ((yyvsp[0].reg) == FPS) + (yyval.onereg) = 25; + else + (yyval.onereg) = 26; + } +#line 2069 "y.tab.c" /* yacc.c:1646 */ + break; + + +#line 2073 "y.tab.c" /* yacc.c:1646 */ + default: break; } -#endif + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; -#if YYLSP_NEEDED - *++yylsp = yyloc; -#endif - /* Now `shift' the result of the reduction. Determine what state + /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else - yystate = yydefgoto[yyn - YYNTBASE]; + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - char *yymsg; - int yyx, yycount; - - yycount = 0; - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) - if (yycheck[yyx + yyn] == yyx) - yysize += yystrlen (yytname[yyx]) + 15, yycount++; - yysize += yystrlen ("parse error, unexpected ") + 1; - yysize += yystrlen (yytname[YYTRANSLATE (yychar)]); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "parse error, unexpected "); - yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); - - if (yycount < 5) - { - yycount = 0; - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); - yyx++) - if (yycheck[yyx + yyn] == yyx) - { - const char *yyq = ! yycount ? ", expecting " : " or "; - yyp = yystpcpy (yyp, yyq); - yyp = yystpcpy (yyp, yytname[yyx]); - yycount++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("parse error; also virtual memory exhausted"); - } - else -#endif /* defined (YYERROR_VERBOSE) */ - yyerror ("parse error"); +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR +#endif } - goto yyerrlab1; -/*--------------------------------------------------. -| yyerrlab1 -- error raised explicitly by an action | -`--------------------------------------------------*/ -yyerrlab1: + if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - YYDPRINTF ((stderr, "Discarding token %d (%s).\n", - yychar, yytname[yychar1])); - yychar = YYEMPTY; + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; + goto yyerrlab1; -/*-------------------------------------------------------------------. -| yyerrdefault -- current state does not do anything special for the | -| error token. | -`-------------------------------------------------------------------*/ -yyerrdefault: -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: - /* If its default is to accept any token, ok. Otherwise pop it. */ - yyn = yydefact[yystate]; - if (yyn) - goto yydefault; -#endif + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; -/*---------------------------------------------------------------. -| yyerrpop -- pop the current state because it cannot handle the | -| error token | -`---------------------------------------------------------------*/ -yyerrpop: - if (yyssp == yyss) - YYABORT; - yyvsp--; - yystate = *--yyssp; -#if YYLSP_NEEDED - yylsp--; -#endif +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ -#if YYDEBUG - if (yydebug) + for (;;) { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "Error: state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); } -#endif - -/*--------------. -| yyerrhandle. | -`--------------*/ -yyerrhandle: - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - - YYDPRINTF ((stderr, "Shifting error token, ")); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -1830,22 +2258,46 @@ yyabortlab: yyresult = 1; goto yyreturn; -/*---------------------------------------------. -| yyoverflowab -- parser overflow comes here. | -`---------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ +#endif yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); #endif return yyresult; } -#line 648 "m68k-parse.y" +#line 648 "m68k-parse.y" /* yacc.c:1906 */ /* The string to parse is stored here, and modified by yylex. */ @@ -2147,6 +2599,7 @@ yylex () } yylval.exp.size = SIZE_UNSPEC; + yylval.exp.baserel = 0; if (s <= str + 2 || (s[-2] != '.' && s[-2] != ':')) tail = 0; @@ -2154,18 +2607,21 @@ yylex () { switch (s[-1]) { + case 'B': + yylval.exp.baserel = 1; case 's': case 'S': case 'b': - case 'B': yylval.exp.size = SIZE_BYTE; break; - case 'w': case 'W': + yylval.exp.baserel = 1; + case 'w': yylval.exp.size = SIZE_WORD; break; - case 'l': case 'L': + yylval.exp.baserel = 1; + case 'l': yylval.exp.size = SIZE_LONG; break; default: diff --git a/ld/ld.1 b/ld/ld.1 index b268976..206e201 100644 --- a/ld/ld.1 +++ b/ld/ld.1 @@ -1,15 +1,7 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp @@ -25,11 +17,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -46,23 +38,36 @@ . ds PI \(*p . ds L" `` . ds R" '' +. ds C` +. ds C' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for -.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -.. -. nr % 0 -. rr F -.\} .\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{ +. if \nF \{ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +133,11 @@ .\" ======================================================================== .\" .IX Title "LD 1" -.TH LD 1 "2003-06-12" "binutils-2.14" "GNU Development Tools" +.TH LD 1 "2015-03-25" "binutils-2.14" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" ld \- Using LD, the GNU linker .SH "SYNOPSIS" @@ -147,13 +156,13 @@ to provide explicit and total control over the linking process. This man page does not describe the command language; see the \&\fBld\fR entry in \f(CW\*(C`info\*(C'\fR, or the manual ld: the \s-1GNU\s0 linker, for full details on the command language and -on other aspects of the \s-1GNU\s0 linker. +on other aspects of the \s-1GNU\s0 linker. .PP This version of \fBld\fR uses the general purpose \s-1BFD\s0 libraries to operate on object files. This allows \fBld\fR to read, combine, and write object files in many different formats\-\-\-for example, \s-1COFF\s0 or \&\f(CW\*(C`a.out\*(C'\fR. Different formats may be linked together to produce any -available kind of object file. +available kind of object file. .PP Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other linkers in providing diagnostic information. Many linkers abandon @@ -173,7 +182,7 @@ object files on a standard, supported Unix system. On such a system, to link a file \f(CW\*(C`hello.o\*(C'\fR: .PP .Vb 1 -\& ld -o /lib/crt0.o hello.o -lc +\& ld \-o /lib/crt0.o hello.o \-lc .Ve .PP This tells \fBld\fR to produce a file called \fIoutput\fR as the @@ -239,7 +248,7 @@ prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular compiler driver) like this: .PP .Vb 1 -\& gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup +\& gcc \-Wl,\-\-startgroup foo.o bar.o \-Wl,\-\-endgroup .Ve .PP This is important, because otherwise the compiler driver program may @@ -264,7 +273,7 @@ In the current release of \fBld\fR, this option is useful only for the Intel 960 family of architectures. In that \fBld\fR configuration, the \&\fIarchitecture\fR argument identifies the particular architecture in the 960 family, enabling some safeguards and modifying the -archive-library search path. +archive-library search path. .Sp Future releases of \fBld\fR may support similar functionality for other architecture families. @@ -302,7 +311,7 @@ You can also define the input format from a script, using the command .IP "\fB\-\-mri\-script=\fR\fIMRI-commandfile\fR" 4 .IX Item "--mri-script=MRI-commandfile" .PD -For compatibility with linkers produced by \s-1MRI\s0, \fBld\fR accepts script +For compatibility with linkers produced by \s-1MRI, \s0\fBld\fR accepts script files written in an alternate, restricted command language, described in the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation. Introduce \s-1MRI\s0 script files with @@ -333,7 +342,7 @@ program, rather than the default entry point. If there is no symbol named \fIentry\fR, the linker will try to parse \fIentry\fR as a number, and use that as the entry address (the number will be interpreted in base 10; you may use a leading \fB0x\fR for base 16, or a leading -\&\fB0\fR for base 8). +\&\fB0\fR for base 8). .IP "\fB\-E\fR" 4 .IX Item "-E" .PD 0 @@ -430,7 +439,7 @@ Ignored. Provided for compatibility with other tools. .PD Set the maximum size of objects to be optimized using the \s-1GP\s0 register to \&\fIsize\fR. This is only meaningful for object file formats such as -\&\s-1MIPS\s0 \s-1ECOFF\s0 which supports putting large and small objects into different +\&\s-1MIPS ECOFF\s0 which supports putting large and small objects into different sections. This is ignored for other object file formats. .IP "\fB\-h\fR\fIname\fR" 4 .IX Item "-hname" @@ -483,7 +492,7 @@ archives multiple times. You may list the same archive multiple times on the command line. .Sp This type of archive searching is standard for Unix linkers. However, -if you are using \fBld\fR on \s-1AIX\s0, note that it is different from the +if you are using \fBld\fR on \s-1AIX,\s0 note that it is different from the behaviour of the \s-1AIX\s0 linker. .IP "\fB\-L\fR\fIsearchdir\fR" 4 .IX Item "-Lsearchdir" @@ -504,7 +513,7 @@ by the \fIsysroot prefix\fR, a path specified when the linker is configured. .Sp The default set of paths searched (without being specified with \&\fB\-L\fR) depends on which emulation mode \fBld\fR is using, and in -some cases also on how it was configured. +some cases also on how it was configured. .Sp The paths can also be specified in a link script with the \&\f(CW\*(C`SEARCH_DIR\*(C'\fR command. Directories specified this way are searched @@ -559,8 +568,8 @@ mark the output as \f(CW\*(C`OMAGIC\*(C'\fR. .IP "\fB\-\-no\-omagic\fR" 4 .IX Item "--no-omagic" This option negates most of the effects of the \fB\-N\fR option. It -sets the text section to be read\-only, and forces the data segment to -be page\-aligned. Note \- this option does not enable linking against +sets the text section to be read-only, and forces the data segment to +be page-aligned. Note \- this option does not enable linking against shared libraries. Use \fB\-Bdynamic\fR for this. .IP "\fB\-o\fR \fIoutput\fR" 4 .IX Item "-o output" @@ -1036,7 +1045,7 @@ usual format on each machine. \fIoutput-format\fR is a text string, the name of a particular format supported by the \s-1BFD\s0 libraries. (You can list the available binary formats with \fBobjdump \-i\fR.) The script command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but -this option overrides it. +this option overrides it. .IP "\fB\-qmagic\fR" 4 .IX Item "-qmagic" This option is ignored for Linux compatibility. @@ -1103,7 +1112,7 @@ When using \s-1ELF\s0 or SunOS, one shared library may require another. This happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one of the input files. .Sp -When the linker encounters such a dependency when doing a non\-shared, +When the linker encounters such a dependency when doing a non-shared, non-relocatable link, it will automatically try to locate the required shared library and include it in the link, if it is not included explicitly. In such a case, the \fB\-rpath\-link\fR option @@ -1160,7 +1169,7 @@ warning and continue with the link. .IP "\fB\-Bshareable\fR" 4 .IX Item "-Bshareable" .PD -Create a shared library. This is currently only supported on \s-1ELF\s0, \s-1XCOFF\s0 +Create a shared library. This is currently only supported on \s-1ELF, XCOFF\s0 and SunOS platforms. On SunOS, the linker will automatically create a shared library if the \fB\-e\fR option is not used and there are undefined symbols in the link. @@ -1281,7 +1290,7 @@ Turning a common symbol into a reference, because there is already a definition for the symbol. .Sp .Vb 3 -\& (
): warning: common of `' +\& (
): warning: common of \`\*(Aq \& overridden by definition \& (
): warning: defined here .Ve @@ -1291,7 +1300,7 @@ the symbol is encountered. This is the same as the previous case, except that the symbols are encountered in a different order. .Sp .Vb 3 -\& (
): warning: definition of `' +\& (
): warning: definition of \`\*(Aq \& overriding common \& (
): warning: common is here .Ve @@ -1300,14 +1309,14 @@ Merging a common symbol with a previous same-sized common symbol. .Sp .Vb 3 \& (
): warning: multiple common -\& of `' +\& of \`\*(Aq \& (
): warning: previous common is here .Ve .IP "4." 4 Merging a common symbol with a previous larger common symbol. .Sp .Vb 3 -\& (
): warning: common of `' +\& (
): warning: common of \`\*(Aq \& overridden by larger common \& (
): warning: larger common is here .Ve @@ -1317,7 +1326,7 @@ the same as the previous case, except that the symbols are encountered in a different order. .Sp .Vb 3 -\& (
): warning: common of `' +\& (
): warning: common of \`\*(Aq \& overriding smaller common \& (
): warning: smaller common is here .Ve @@ -1327,7 +1336,7 @@ encountered in a different order. .IP "\fB\-\-warn\-constructors\fR" 4 .IX Item "--warn-constructors" Warn if any global constructors are used. This is only useful for a few -object file formats. For formats like \s-1COFF\s0 or \s-1ELF\s0, the linker can not +object file formats. For formats like \s-1COFF\s0 or \s-1ELF,\s0 the linker can not detect the use of global constructors. .IP "\fB\-\-warn\-multiple\-gp\fR" 4 .IX Item "--warn-multiple-gp" @@ -1383,10 +1392,10 @@ Here is a trivial example: .Sp .Vb 6 \& void * -\& __wrap_malloc (int c) +\& _\|_wrap_malloc (int c) \& { \& printf ("malloc called with %ld\en", c); -\& return __real_malloc (c); +\& return _\|_real_malloc (c); \& } .Ve .Sp @@ -1406,7 +1415,7 @@ call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR. .IP "\fB\-\-disable\-new\-dtags\fR" 4 .IX Item "--disable-new-dtags" .PD -This linker can create the new dynamic tags in \s-1ELF\s0. But the older \s-1ELF\s0 +This linker can create the new dynamic tags in \s-1ELF.\s0 But the older \s-1ELF\s0 systems may not understand them. If you specify \&\fB\-\-enable\-new\-dtags\fR, the dynamic tags will be created as needed. If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be @@ -1466,7 +1475,7 @@ mismatches are considered to be errors. .IP "\fB\-\-export\-all\-symbols\fR" 4 .IX Item "--export-all-symbols" If given, all global symbols in the objects used to build a \s-1DLL\s0 will -be exported by the \s-1DLL\s0. Note that this is the default if there +be exported by the \s-1DLL. \s0 Note that this is the default if there otherwise wouldn't be any exported symbols. When symbols are explicitly exported via \s-1DEF\s0 files or implicitly exported via function attributes, the default is to not export anything else unless this @@ -1474,7 +1483,7 @@ option is given. Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR, \&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, \f(CW\*(C`DllMainCRTStartup@12\*(C'\fR, and \&\f(CW\*(C`impure_ptr\*(C'\fR will not be automatically exported. Also, symbols imported from other DLLs will not be -re\-exported, nor will symbols specifying the \s-1DLL\s0's internal layout +re-exported, nor will symbols specifying the \s-1DLL\s0's internal layout such as those beginning with \f(CW\*(C`_head_\*(C'\fR or ending with \&\f(CW\*(C`_iname\*(C'\fR. In addition, no symbols from \f(CW\*(C`libgcc\*(C'\fR, \&\f(CW\*(C`libstd++\*(C'\fR, \f(CW\*(C`libmingw32\*(C'\fR, or \f(CW\*(C`crtX.o\*(C'\fR will be exported. @@ -1576,7 +1585,7 @@ creation step. .IX Item "--enable-auto-image-base" Automatically choose the image base for DLLs, unless one is specified using the \f(CW\*(C`\-\-image\-base\*(C'\fR argument. By using a hash generated -from the dllname to create unique image bases for each \s-1DLL\s0, in-memory +from the dllname to create unique image bases for each \s-1DLL,\s0 in-memory collisions and relocations which can delay program execution are avoided. [This option is specific to the i386 \s-1PE\s0 targeted port of the linker] @@ -1602,14 +1611,14 @@ Do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to \f(CW\*(C`_\|_imp_\|_sy building the import libraries with those \s-1DATA\s0 exports. This generally will 'just work' \*(-- but sometimes you may see this message: .Sp -"variable '' can't be auto\-imported. Please read the +"variable '' can't be auto-imported. Please read the documentation for ld's \f(CW\*(C`\-\-enable\-auto\-import\*(C'\fR for details." .Sp This message occurs when some (sub)expression accesses an address ultimately given by the sum of two constants (Win32 import tables only allow one). Instances where this may occur include accesses to member -fields of struct variables imported from a \s-1DLL\s0, as well as using a -constant index into an array variable imported from a \s-1DLL\s0. Any +fields of struct variables imported from a \s-1DLL,\s0 as well as using a +constant index into an array variable imported from a \s-1DLL. \s0 Any multiword variable (arrays, structs, long long, etc) may trigger this error condition. However, regardless of the exact data type of the offending exported variable, ld will always detect it, issue @@ -1629,7 +1638,7 @@ a variable, or b) make the 'constant' index a variable. Thus: .Sp .Vb 3 \& extern type extern_array[]; -\& extern_array[1] --> +\& extern_array[1] \-\-> \& { volatile type *t=extern_array; t[1] } .Ve .Sp @@ -1637,7 +1646,7 @@ or .Sp .Vb 3 \& extern type extern_array[]; -\& extern_array[1] --> +\& extern_array[1] \-\-> \& { volatile int t=1; extern_array[t] } .Ve .Sp @@ -1646,15 +1655,15 @@ is to make the struct itself (or the long long, or the ...) variable: .Sp .Vb 3 \& extern struct s extern_struct; -\& extern_struct.field --> -\& { volatile struct s *t=&extern_struct; t->field } +\& extern_struct.field \-\-> +\& { volatile struct s *t=&extern_struct; t\->field } .Ve .Sp or .Sp .Vb 3 \& extern long long extern_ll; -\& extern_ll --> +\& extern_ll \-\-> \& { volatile long long * local_ll=&extern_ll; *local_ll } .Ve .Sp @@ -1662,7 +1671,7 @@ A third method of dealing with this difficulty is to abandon \&'auto\-import' for the offending symbol and mark it with \&\f(CW\*(C`_\|_declspec(dllimport)\*(C'\fR. However, in practice that requires using compile-time #defines to indicate whether you are -building a \s-1DLL\s0, building client code that will link to the \s-1DLL\s0, or +building a \s-1DLL,\s0 building client code that will link to the \s-1DLL,\s0 or merely building/linking to a static library. In making the choice between the various methods of resolving the 'direct address with constant offset' problem, you should consider typical real-world usage: @@ -1670,9 +1679,9 @@ constant offset' problem, you should consider typical real-world usage: Original: .Sp .Vb 7 -\& --foo.h +\& \-\-foo.h \& extern int arr[]; -\& --foo.c +\& \-\-foo.c \& #include "foo.h" \& void main(int argc, char **argv){ \& printf("%d\en",arr[1]); @@ -1682,9 +1691,9 @@ Original: Solution 1: .Sp .Vb 9 -\& --foo.h +\& \-\-foo.h \& extern int arr[]; -\& --foo.c +\& \-\-foo.c \& #include "foo.h" \& void main(int argc, char **argv){ \& /* This workaround is for win32 and cygwin; do not "optimize" */ @@ -1695,17 +1704,17 @@ Solution 1: .Sp Solution 2: .Sp -.Vb 14 -\& --foo.h -\& /* Note: auto-export is assumed (no __declspec(dllexport)) */ -\& #if (defined(_WIN32) || defined(__CYGWIN__)) && \e +.Vb 10 +\& \-\-foo.h +\& /* Note: auto\-export is assumed (no _\|_declspec(dllexport)) */ +\& #if (defined(_WIN32) || defined(_\|_CYGWIN_\|_)) && \e \& !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) -\& #define FOO_IMPORT __declspec(dllimport) +\& #define FOO_IMPORT _\|_declspec(dllimport) \& #else \& #define FOO_IMPORT \& #endif \& extern FOO_IMPORT int arr[]; -\& --foo.c +\& \-\-foo.c \& #include "foo.h" \& void main(int argc, char **argv){ \& printf("%d\en",arr[1]); @@ -1782,7 +1791,7 @@ this method often succeeds, but there are potential ambiguities, since there is no method of ensuring that the magic number used to specify object-file formats is unique. However, the configuration procedure for \&\s-1BFD\s0 on each system places the conventional format for that system first -in the search\-list, so ambiguities are resolved in favor of convention. +in the search-list, so ambiguities are resolved in favor of convention. .PP \&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the \&\fB\-m\fR option. The emulation can affect various aspects of linker diff --git a/ld/ldlex.c b/ld/ldlex.c index e722342..0de7865 100644 --- a/ld/ldlex.c +++ b/ld/ldlex.c @@ -1,5 +1,5 @@ -#line 3 "lex.yy.c" +#line 3 "ldlex.c" #define YY_INT_ALIGNED short int @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 31 +#define YY_FLEX_SUBMINOR_VERSION 39 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -30,7 +30,15 @@ /* C99 systems have . Non-C99 systems may or may not. */ -#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; @@ -45,7 +53,6 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -76,6 +83,8 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#endif /* ! C99 */ + #endif /* ! FLEXINT_H */ #ifdef __cplusplus @@ -85,11 +94,12 @@ typedef unsigned int flex_uint32_t; #else /* ! __cplusplus */ -#if __STDC__ +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) #define YY_USE_CONST -#endif /* __STDC__ */ +#endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST @@ -131,15 +141,32 @@ typedef unsigned int flex_uint32_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else #define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ #endif +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int yyleng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; extern FILE *yyin, *yyout; @@ -148,6 +175,7 @@ extern FILE *yyin, *yyout; #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ @@ -165,16 +193,6 @@ extern FILE *yyin, *yyout; #define unput(c) yyunput( c, (yytext_ptr) ) -/* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef unsigned int yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -192,7 +210,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -262,12 +280,12 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int yyleng; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; -static int yy_init = 1; /* whether we need to initialize */ +static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches @@ -291,7 +309,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); @@ -1406,7 +1424,7 @@ int yywrap () { return 1; } -#line 1410 "lex.yy.c" +#line 1428 "ldlex.c" #define INITIAL 0 #define SCRIPT 1 @@ -1418,16 +1436,49 @@ int yywrap () { return 1; } #define VERS_SCRIPT 7 #define VERS_NODE 8 +#ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include +#endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + /* Macros after this point can all be overridden by user definitions in * section 1. */ @@ -1462,7 +1513,12 @@ static int input (void ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else #define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1470,7 +1526,7 @@ static int input (void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -1563,29 +1619,9 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 130 "ldlex.l" - - - if (parser_input != input_selected) - { - /* The first token of the input determines the initial parser state. */ - input_type t = parser_input; - parser_input = input_selected; - switch (t) - { - case input_script: return INPUT_SCRIPT; break; - case input_mri_script: return INPUT_MRI_SCRIPT; break; - case input_version_script: return INPUT_VERSION_SCRIPT; break; - case input_defsym: return INPUT_DEFSYM; break; - default: abort (); - } - } - -#line 1585 "lex.yy.c" - - if ( (yy_init) ) + if ( !(yy_init) ) { - (yy_init) = 0; + (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; @@ -1609,6 +1645,27 @@ YY_DECL yy_load_buffer_state( ); } + { +#line 130 "ldlex.l" + + + if (parser_input != input_selected) + { + /* The first token of the input determines the initial parser state. */ + input_type t = parser_input; + parser_input = input_selected; + switch (t) + { + case input_script: return INPUT_SCRIPT; break; + case input_mri_script: return INPUT_MRI_SCRIPT; break; + case input_version_script: return INPUT_VERSION_SCRIPT; break; + case input_defsym: return INPUT_DEFSYM; break; + default: abort (); + } + } + +#line 1668 "ldlex.c" + while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); @@ -1625,7 +1682,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -2652,7 +2709,7 @@ YY_RULE_SETUP #line 452 "ldlex.l" ECHO; YY_BREAK -#line 2656 "lex.yy.c" +#line 2713 "ldlex.c" case YY_END_OF_BUFFER: { @@ -2781,6 +2838,7 @@ ECHO; "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ + } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer @@ -2836,21 +2894,21 @@ static int yy_get_next_buffer (void) else { - size_t num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -2905,6 +2963,14 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; @@ -2968,7 +3034,7 @@ static int yy_get_next_buffer (void) yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 1150); - return yy_is_jam ? 0 : yy_current_state; + return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) @@ -2983,7 +3049,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; + register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -3032,7 +3098,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -3192,10 +3258,6 @@ static void yy_load_buffer_state (void) yyfree((void *) b ); } -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. @@ -3308,7 +3370,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -3320,7 +3382,9 @@ static void yyensure_buffer_stack (void) (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); - + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; @@ -3338,6 +3402,8 @@ static void yyensure_buffer_stack (void) ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -3382,42 +3448,42 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. - * @param str a NUL-terminated string to scan + * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ -YY_BUFFER_STATE yy_scan_string (yyconst char * str ) +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { - return yy_scan_bytes(str,strlen(str) ); + return yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * bytes, int len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - int i; + yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = len + 2; + n = _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - for ( i = 0; i < len; ++i ) - buf[i] = bytes[i]; + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; - buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ); if ( ! b ) @@ -3488,7 +3554,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } @@ -3538,6 +3604,34 @@ void yyset_debug (int bdebug ) yy_flex_debug = bdebug ; } +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { @@ -3553,6 +3647,10 @@ int yylex_destroy (void) yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + return 0; } @@ -3564,7 +3662,7 @@ int yylex_destroy (void) static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; - for ( i = 0; i < n; ++i ) + for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif @@ -3573,7 +3671,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) static int yy_flex_strlen (yyconst char * s ) { register int n; - for ( n = 0; s[n]; ++n ) + for ( n = 0; s[n]; ++n ) ; return n; @@ -3604,19 +3702,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#undef YY_NEW_FILE -#undef YY_FLUSH_BUFFER -#undef yy_set_bol -#undef yy_new_buffer -#undef yy_set_interactive -#undef yytext_ptr -#undef YY_DO_BEFORE_ACTION - -#ifdef YY_DECL_IS_OURS -#undef YY_DECL_IS_OURS -#undef YY_DECL -#endif -#line 452 "ldlex.l" +#line 451 "ldlex.l"